diff --git a/Sources/DeeplinkRouter/BaseNavigator.swift b/Sources/DeeplinkRouter/BaseNavigator.swift index 2155b12..3290850 100644 --- a/Sources/DeeplinkRouter/BaseNavigator.swift +++ b/Sources/DeeplinkRouter/BaseNavigator.swift @@ -150,6 +150,13 @@ private extension BaseNavigator { } } + // Проверяем дочерние контроллеры + for child in rootViewController.children { + if let found = findController(in: child, ofType: type) { + return found + } + } + // Проверяем представленный контроллер if let presented = rootViewController.presentedViewController { return findController(in: presented, ofType: type) diff --git a/Tests/DeeplinkRouterTests/BaseNavigatorTests.swift b/Tests/DeeplinkRouterTests/BaseNavigatorTests.swift index af94f67..95856e0 100644 --- a/Tests/DeeplinkRouterTests/BaseNavigatorTests.swift +++ b/Tests/DeeplinkRouterTests/BaseNavigatorTests.swift @@ -10,6 +10,8 @@ import XCTest final class BaseNavigatorTests: XCTestCase { + class TargetViewController: UIViewController {} + var navigator: BaseNavigator! var window: UIWindow! @@ -30,6 +32,23 @@ final class BaseNavigatorTests: XCTestCase { XCTAssertEqual(returnedWindow, window) } + func testFindControllerReturnsCorrectController() { + // Given + let rootVC = UIViewController() + let targetVC = TargetViewController() + let navController = UINavigationController(rootViewController: targetVC) + rootVC.addChild(navController) + + window.rootViewController = rootVC + window.makeKeyAndVisible() + + // When + let foundVC = navigator.findController(type: TargetViewController.self) + + // Then + XCTAssertEqual(foundVC, targetVC) + } + func testTopVcReturnsCorrectViewController() { // Given let rootViewController = UIViewController() @@ -71,7 +90,7 @@ final class BaseNavigatorTests: XCTestCase { XCTAssertEqual(tabbar, tabBarController) } - @MainActor + @MainActor func testSetLoadingShowsAndHidesLoader() { // Given window.makeKeyAndVisible()