mirror of
https://github.com/bitwarden/ios.git
synced 2025-12-10 00:42:29 -06:00
126 lines
4.2 KiB
Swift
126 lines
4.2 KiB
Swift
import BitwardenKit
|
|
import BitwardenKitMocks
|
|
import BitwardenResources
|
|
import SwiftUI
|
|
import XCTest
|
|
|
|
@testable import AuthenticatorShared
|
|
|
|
class SettingsCoordinatorTests: BitwardenTestCase {
|
|
// MARK: Properties
|
|
|
|
var module: MockAppModule!
|
|
var stackNavigator: MockStackNavigator!
|
|
var subject: SettingsCoordinator!
|
|
|
|
// MARK: Setup & Teardown
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
|
|
module = MockAppModule()
|
|
stackNavigator = MockStackNavigator()
|
|
|
|
subject = SettingsCoordinator(
|
|
module: module,
|
|
services: ServiceContainer.withMocks(),
|
|
stackNavigator: stackNavigator,
|
|
)
|
|
}
|
|
|
|
override func tearDown() {
|
|
super.tearDown()
|
|
|
|
module = nil
|
|
stackNavigator = nil
|
|
subject = nil
|
|
}
|
|
|
|
// MARK: Tests
|
|
|
|
/// `navigate(to:)` with `.alert` has the stack navigator present the alert.
|
|
@MainActor
|
|
func test_navigateTo_alert() throws {
|
|
let alert = Alert.defaultAlert(
|
|
title: Localizations.anErrorHasOccurred,
|
|
message: Localizations.genericErrorMessage,
|
|
)
|
|
subject.showAlert(alert)
|
|
|
|
XCTAssertEqual(stackNavigator.alerts, [alert])
|
|
}
|
|
|
|
/// `navigate(to:)` with `.dismiss` dismisses the view.
|
|
@MainActor
|
|
func test_navigate_dismiss() throws {
|
|
subject.navigate(to: .dismiss)
|
|
|
|
let action = try XCTUnwrap(stackNavigator.actions.last)
|
|
XCTAssertEqual(action.type, .dismissed)
|
|
}
|
|
|
|
/// `navigate(to:)` with `.exportItems` presents the export vault view.
|
|
@MainActor
|
|
func test_navigateTo_exportVault() throws {
|
|
subject.navigate(to: .exportItems)
|
|
|
|
let navigationController = try XCTUnwrap(stackNavigator.actions.last?.view as? UINavigationController)
|
|
XCTAssertTrue(stackNavigator.actions.last?.view is UINavigationController)
|
|
XCTAssertTrue(navigationController.viewControllers.first is UIHostingController<ExportItemsView>)
|
|
}
|
|
|
|
/// `navigate(to:)` with `.flightRecorder` starts flight recorder coordinator and navigates to
|
|
/// the enable flight recorder view.
|
|
@MainActor
|
|
func test_navigateTo_flightRecorder() throws {
|
|
subject.navigate(to: .flightRecorder(.enableFlightRecorder))
|
|
|
|
XCTAssertTrue(module.flightRecorderCoordinator.isStarted)
|
|
XCTAssertEqual(module.flightRecorderCoordinator.routes.last, .enableFlightRecorder)
|
|
}
|
|
|
|
/// `navigate(to:)` with `.selectLanguage()` presents the select language view.
|
|
@MainActor
|
|
func test_navigateTo_selectLanguage() throws {
|
|
subject.navigate(to: .selectLanguage(currentLanguage: .default))
|
|
|
|
let navigationController = try XCTUnwrap(stackNavigator.actions.last?.view as? UINavigationController)
|
|
XCTAssertTrue(stackNavigator.actions.last?.view is UINavigationController)
|
|
XCTAssertTrue(navigationController.viewControllers.first is UIHostingController<SelectLanguageView>)
|
|
}
|
|
|
|
/// `navigate(to:)` with `.settings` pushes the settings view onto the stack navigator.
|
|
@MainActor
|
|
func test_navigateTo_settings() throws {
|
|
subject.navigate(to: .settings)
|
|
|
|
let action = try XCTUnwrap(stackNavigator.actions.last)
|
|
XCTAssertEqual(action.type, .pushed)
|
|
XCTAssertTrue(action.view is SettingsView)
|
|
}
|
|
|
|
/// `showLoadingOverlay()` and `hideLoadingOverlay()` can be used to show and hide the loading overlay.
|
|
@MainActor
|
|
func test_show_hide_loadingOverlay() throws {
|
|
stackNavigator.rootViewController = UIViewController()
|
|
try setKeyWindowRoot(viewController: XCTUnwrap(stackNavigator.rootViewController))
|
|
|
|
XCTAssertNil(window.viewWithTag(LoadingOverlayDisplayHelper.overlayViewTag))
|
|
|
|
subject.showLoadingOverlay(LoadingOverlayState(title: "Loading..."))
|
|
XCTAssertNotNil(window.viewWithTag(LoadingOverlayDisplayHelper.overlayViewTag))
|
|
|
|
subject.hideLoadingOverlay()
|
|
waitFor { window.viewWithTag(LoadingOverlayDisplayHelper.overlayViewTag) == nil }
|
|
XCTAssertNil(window.viewWithTag(LoadingOverlayDisplayHelper.overlayViewTag))
|
|
}
|
|
|
|
/// `start()` navigates to the settings view.
|
|
@MainActor
|
|
func test_start() {
|
|
subject.start()
|
|
|
|
XCTAssertTrue(stackNavigator.actions.last?.view is SettingsView)
|
|
}
|
|
}
|