Welcome to the NinjaOne candidate application. There are 5 tasks that need to be completed. Each task has its own folder and contains a view and view model. Each task is isolated to its own folder.
In the DebugTask folder, there are several functions that have bugs.
- Test each function with different sample data sets and fix the potential issues.
- Display the results in the view.
In the DocumentationUnitTestingTask folder, you will see a view that allows the user to enter values for side 1, 2, and optionally 3. You should:
- Complete a method to return square footage (if only side 1 and side 2 are provided) or cubic volume (if side 3 is also provided). If needed, write helper functions.
- In NinjaCandidateTests.swift, write unit test(s) for this function. Make sure to think about various scenarios and edge cases.
- Add markdown documentation for this method, including descriptions of parameters and return values.
In the ErrorsValidationTask folder, you will see a view that allows the user to enter an e-mail, phone, and MFA code. You should:
- Validate these three items using a custom Error type, and expose the validation result to the view.
- See ErrorsValidationViewModel for details about the defintion of "valid".
- Show the user an error message for any invalid item.
- Show the user a success message if all the items are valid.
In the NetworkingTask folder, write a custom networking client and make a request to a public api of your choice.
- Add these headers (app-version, iOS-os-version, build-number) to the request.
- Use async / await and core networking, no frameworks like AlamoFire.
In the CustomTask folder, write and design a view that shows an alert banner for different messages. Have it animate in/out. Update the appearance for different types of alerts.
- Use SwiftUI.
- Use any libraries/frameworks you like. Add them as dependancies under SPM.
- Populate the view model with properties that will be displayed.
- Bonus for consuming an API, customizing the UI or adding proper formatted code documentation.