新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。 Co-authored-by: Cursor <cursoragent@cursor.com>
87 lines
3.0 KiB
Swift
87 lines
3.0 KiB
Swift
//
|
||
// AppUITestRouteDriver.swift
|
||
// suixinkan
|
||
//
|
||
// Created by Codex on 2026/6/26.
|
||
//
|
||
|
||
#if DEBUG
|
||
import SwiftUI
|
||
|
||
/// UI Test 专用路由直达器,通过启动参数打开目标页,绕开自定义 TabBar 下 XCUITest 难以触发的 push。
|
||
@MainActor
|
||
enum AppUITestRouteDriver {
|
||
private static var didApply = false
|
||
|
||
/// 根据启动参数跳转到指定首页菜单或个人中心页面。
|
||
static func applyIfNeeded(appRouter: AppRouter) async {
|
||
guard AppUITestLaunchState.isRunningUITests, !didApply else { return }
|
||
guard AppUITestLaunchState.pendingMenuTitle != nil
|
||
|| AppUITestLaunchState.pendingProfileRouteRawValue != nil else { return }
|
||
|
||
didApply = true
|
||
try? await Task.sleep(nanoseconds: 600_000_000)
|
||
|
||
if let menuTitle = AppUITestLaunchState.pendingMenuTitle {
|
||
openHomeMenu(title: menuTitle, appRouter: appRouter)
|
||
return
|
||
}
|
||
|
||
if let rawValue = AppUITestLaunchState.pendingProfileRouteRawValue {
|
||
openProfileRoute(rawValue: rawValue, appRouter: appRouter)
|
||
}
|
||
}
|
||
|
||
/// 打开首页调试目录中的指定菜单。
|
||
private static func openHomeMenu(title: String, appRouter: AppRouter) {
|
||
guard let item = HomeMenuRouter.debugAllMenuItems().first(where: { $0.title == title }) else {
|
||
return
|
||
}
|
||
|
||
let resolved = HomeMenuRouter.resolve(uri: item.uri, title: item.title)
|
||
switch resolved {
|
||
case .tab(let tab):
|
||
appRouter.select(tab)
|
||
case .orders(let entry):
|
||
appRouter.selectOrders(entry: entry)
|
||
case .destination(let homeRoute):
|
||
appRouter.select(.home)
|
||
appRouter.router(for: .home).navigate(to: .home(homeRoute))
|
||
case .unsupported(let uri, let title, _):
|
||
appRouter.select(.home)
|
||
appRouter.router(for: .home).navigate(to: .home(.modulePlaceholder(uri: uri, title: title)))
|
||
case .placeholder(let uri, let title):
|
||
appRouter.select(.home)
|
||
appRouter.router(for: .home).navigate(to: .home(.modulePlaceholder(uri: uri, title: title)))
|
||
}
|
||
}
|
||
|
||
/// 打开个人中心二级页面。
|
||
private static func openProfileRoute(rawValue: String, appRouter: AppRouter) {
|
||
let route: ProfileRoute?
|
||
switch rawValue {
|
||
case "settings":
|
||
route = .settings
|
||
case "realNameAuth":
|
||
route = .realNameAuth
|
||
case "accountSwitch":
|
||
route = .accountSwitch
|
||
case "debugHomeMenus":
|
||
route = .debugHomeMenus
|
||
case "agreement.about":
|
||
route = .agreement(.about)
|
||
case "agreement.userAgreement":
|
||
route = .agreement(.userAgreement)
|
||
case "agreement.privacyPolicy":
|
||
route = .agreement(.privacyPolicy)
|
||
default:
|
||
route = nil
|
||
}
|
||
|
||
guard let route else { return }
|
||
appRouter.select(.profile)
|
||
appRouter.router(for: .profile).navigate(to: .profile(route))
|
||
}
|
||
}
|
||
#endif
|