// // OrderListViewModelTests.swift // suixinkanTests // import XCTest @testable import suixinkan @MainActor final class OrderListViewModelTests: XCTestCase { override func tearDown() { AppStore.shared.roleCode = "" AppStore.shared.roleName = "" AppStore.shared.currentScenicId = 0 super.tearDown() } func testOrderStatusQueryMapping() { XCTAssertNil(OrderListQueryBuilder.orderStatusQuery(tabIndex: 0)) XCTAssertEqual(OrderListQueryBuilder.orderStatusQuery(tabIndex: 18), "18") XCTAssertEqual(OrderListQueryBuilder.orderStatusQuery(tabIndex: 30), "30") } func testIsRefinedQueryMapping() { XCTAssertNil(OrderListQueryBuilder.isRefinedQuery(rTabIndex: 0)) XCTAssertEqual(OrderListQueryBuilder.isRefinedQuery(rTabIndex: 1), 1) XCTAssertEqual(OrderListQueryBuilder.isRefinedQuery(rTabIndex: 2), 2) } func testPhotographerFilterLabels() { let viewModel = OrderListViewModel() viewModel.onFilterChange(orderStatus: 18, isRefined: 0) XCTAssertEqual(viewModel.filterLabel, "已付定金") viewModel.onFilterChange(orderStatus: 0, isRefined: 1) XCTAssertEqual(viewModel.filterLabel, "需要精修") } func testRoleRoutingPath() { AppStore.shared.roleCode = AppRoleCode.scenicAdmin.rawValue let scenicVM = OrderListViewModel() XCTAssertEqual(scenicVM.listAPIPath, "/api/app/scenic-admin/order/list") XCTAssertTrue(scenicVM.isScenicAdminReadOnly) AppStore.shared.roleCode = AppRoleCode.photographer.rawValue let photoVM = OrderListViewModel() XCTAssertEqual(photoVM.listAPIPath, "/api/yf-handset-app/photog/order/listv2") XCTAssertFalse(photoVM.isScenicAdminReadOnly) } func testLoadMoreBoundary() { let viewModel = OrderListViewModel() XCTAssertFalse(viewModel.shouldLoadMore(at: 0)) } func testOrderEntityDecodesPhotoTravel() throws { let json = """ { "code": 100000, "msg": "success", "data": { "total": 1, "list": [{ "order_number": "NO001", "order_status": 18, "order_status_name": "已付定金", "actual_pay_amount": "99.00", "photo_travel": { "order_photo_num": 10, "order_video_num": 1, "need_check_in": true, "can_cancel_order": true } }] } } """.data(using: .utf8)! let envelope = try JSONDecoder().decode(APIEnvelope>.self, from: json) let order = try XCTUnwrap(envelope.data?.list.first) XCTAssertEqual(order.orderNumber, "NO001") XCTAssertEqual(order.photoTravel?.orderPhotoNum, 10) XCTAssertEqual(order.photoTravel?.needCheckIn, true) } }