Introduce real payment collection and wallet screens to replace home menu placeholders, wire APIs through RootView, and support bank card OSS uploads plus QR code saving to the photo library. Co-authored-by: Cursor <cursoragent@cursor.com>
59 lines
2.3 KiB
Swift
59 lines
2.3 KiB
Swift
//
|
||
// NavigationRouterTests.swift
|
||
// suixinkanTests
|
||
//
|
||
// Created by Codex on 2026/6/22.
|
||
//
|
||
|
||
import XCTest
|
||
@testable import suixinkan
|
||
|
||
/// 主导航路由测试,覆盖 AppRoute 的跨页面导航策略。
|
||
final class NavigationRouterTests: XCTestCase {
|
||
/// 测试通过 NavigationStack push 的子页面默认隐藏底部 TabBar。
|
||
func testPushedRoutesHideTabBarByDefault() {
|
||
XCTAssertTrue(AppRoute.placeholder(title: "详情").hidesTabBarWhenPushed)
|
||
XCTAssertTrue(AppRoute.home(.moreFunctions).hidesTabBarWhenPushed)
|
||
XCTAssertTrue(AppRoute.home(.paymentCollection).hidesTabBarWhenPushed)
|
||
XCTAssertTrue(AppRoute.home(.wallet).hidesTabBarWhenPushed)
|
||
XCTAssertTrue(AppRoute.orders(.storeDetail(try! Self.firstOrder())).hidesTabBarWhenPushed)
|
||
XCTAssertTrue(AppRoute.orders(.writeOffDetail(try! Self.firstWriteOffOrder())).hidesTabBarWhenPushed)
|
||
}
|
||
|
||
/// 测试切换订单 Tab 时会保存订单内部子入口。
|
||
func testSelectOrdersUpdatesTabAndEntry() {
|
||
let router = AppRouter()
|
||
|
||
router.selectOrders(entry: .verificationOrders)
|
||
|
||
XCTAssertEqual(router.selectedTab, .orders)
|
||
XCTAssertEqual(router.selectedOrdersEntry, .verificationOrders)
|
||
}
|
||
|
||
/// 测试订单模块真实路由可被压入导航栈。
|
||
func testOrderRoutesCanBePushedIntoRouterPath() throws {
|
||
let router = RouterPath()
|
||
let order = try Self.firstOrder()
|
||
let writeOff = try Self.firstWriteOffOrder()
|
||
|
||
router.navigate(to: .orders(.storeDetail(order)))
|
||
router.navigate(to: .orders(.writeOffDetail(writeOff)))
|
||
|
||
XCTAssertEqual(router.path.count, 2)
|
||
XCTAssertEqual(router.path[0], .orders(.storeDetail(order)))
|
||
XCTAssertEqual(router.path[1], .orders(.writeOffDetail(writeOff)))
|
||
}
|
||
|
||
/// 返回测试用订单管理列表项。
|
||
private static func firstOrder() throws -> OrderEntity {
|
||
let payload = try TestFixture.payload(ListPayload<OrderEntity>.self, named: "order_v2_success")
|
||
return try XCTUnwrap(payload.list.first)
|
||
}
|
||
|
||
/// 返回测试用核销订单列表项。
|
||
private static func firstWriteOffOrder() throws -> WriteOffOrderItem {
|
||
let payload = try TestFixture.payload(ListPayload<WriteOffOrderItem>.self, named: "writeoff_list_success")
|
||
return try XCTUnwrap(payload.list.first)
|
||
}
|
||
}
|