Skip to content

Commit

Permalink
Merge pull request #29 from erikdrobne/feature/add-unit-tests
Browse files Browse the repository at this point in the history
Feature/add unit tests
  • Loading branch information
erikdrobne committed Nov 6, 2023
2 parents d95ee1d + af81d79 commit 3a8736c
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 43 deletions.
66 changes: 23 additions & 43 deletions Tests/SwiftUICoordinatorTests/CoordinatorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,21 @@ import Foundation
@MainActor
final class CoordinatorTests: XCTestCase {

func test_addChildToCoordinator() {
func test_coordinatorInitialState() {
let navigationController = NavigationController()
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: navigationController)
XCTAssertNil(sut.parent)
XCTAssertTrue(sut.childCoordinators.isEmpty)
}

func test_addChildCoordinator() {
let navigationController = NavigationController()
let sut = MockAppCoordinator(window: UIWindow(), navigationController: navigationController)
let coordinator = MockCoordinator(parent: sut, startRoute: .rectangle, navigationController: navigationController)

sut.start(with: coordinator)
XCTAssertEqual(sut.childCoordinators.count, 1)
XCTAssert(sut.childCoordinators.first?.coordinator === coordinator)
}

func test_addMultipleChildrenToCoordinator() {
Expand All @@ -23,6 +31,7 @@ final class CoordinatorTests: XCTestCase {
sut.add(child: MockCoordinator(parent: coordinator, startRoute: .circle, navigationController: navigationController))

XCTAssertEqual(sut.childCoordinators.count, 2)
XCTAssert(sut.childCoordinators.first?.coordinator === coordinator)
}

func test_removeChildCoordinator() {
Expand All @@ -33,50 +42,21 @@ final class CoordinatorTests: XCTestCase {
sut.start(with: coordinator)
sut.remove(coordinator: coordinator)

XCTAssertEqual(sut.childCoordinators.count, 0)
XCTAssertTrue(sut.childCoordinators.isEmpty)
}

func test_showRouteThrowsError() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
XCTAssertNoThrow(try sut.start())
func test_coordinatorDoesNotRetainChildCoordinators() {
let navigationController = NavigationController()
let sut = MockAppCoordinator(window: UIWindow(), navigationController: navigationController)
var childCoordinator: Coordinator? = MockCoordinator(
parent: sut,
startRoute: .rectangle,
navigationController: navigationController
)

XCTAssertThrowsError(try sut.show(route: .square)) { error in
guard let error = error as? NavigatorError else {
XCTFail("Cannot cast to NavigatorError: \(error)")
return
}

switch error {
case .cannotShow(let route as MockRoute):
XCTAssertEqual(route, .square)
default:
XCTFail("Unexpected error type: \(error)")
}
}
}

func test_showRouteNoThrow() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
XCTAssertNoThrow(try sut.start())
}

func test_setRoutes() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
sut.set(routes: [.rectangle, .rectangle])
XCTAssertEqual(sut.viewControllers.count, 2)
}

func test_appendRoutes() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
sut.append(routes: [.rectangle, .circle])
XCTAssertEqual(sut.viewControllers.count, 2)
}

func test_popToRoot() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
sut.append(routes: [.rectangle, .circle])
XCTAssertEqual(sut.viewControllers.count, 2)
sut.popToRoot(animated: false)
XCTAssertEqual(sut.viewControllers.count, 1)
sut.add(child: childCoordinator!)
XCTAssertNotNil(sut.childCoordinators.first?.coordinator)
childCoordinator = nil
XCTAssertNil(sut.childCoordinators.first?.coordinator)
}
}
58 changes: 58 additions & 0 deletions Tests/SwiftUICoordinatorTests/NavigatorTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
//
// NavigatorTests.swift
//
//
// Created by Erik Drobne on 24. 10. 23.
//

import XCTest
import Foundation
@testable import SwiftUICoordinator

@MainActor
final class NavigatorTests: XCTestCase {

func test_showRouteThrowsError() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
XCTAssertNoThrow(try sut.start())

XCTAssertThrowsError(try sut.show(route: .square)) { error in
guard let error = error as? NavigatorError else {
XCTFail("Cannot cast to NavigatorError: \(error)")
return
}

switch error {
case .cannotShow(let route as MockRoute):
XCTAssertEqual(route, .square)
default:
XCTFail("Unexpected error type: \(error)")
}
}
}

func test_showRouteNoThrow() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
XCTAssertNoThrow(try sut.start())
}

func test_setRoutes() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
sut.set(routes: [.rectangle, .rectangle])
XCTAssertEqual(sut.viewControllers.count, 2)
}

func test_appendRoutes() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
sut.append(routes: [.rectangle, .circle])
XCTAssertEqual(sut.viewControllers.count, 2)
}

func test_popToRoot() {
let sut = MockCoordinator(parent: nil, startRoute: .circle, navigationController: NavigationController())
sut.append(routes: [.rectangle, .circle])
XCTAssertEqual(sut.viewControllers.count, 2)
sut.popToRoot(animated: false)
XCTAssertEqual(sut.viewControllers.count, 1)
}
}

0 comments on commit 3a8736c

Please sign in to comment.