Files
suixinkan_uikit/suixinkanTests/PaymentCollectionRecordViewModelTests.swift
汉秋 005349f8e6 模块化 AppStore 并完善素材管理与个人空间设置。
将会话、权限、位置、收款与排队存储拆分为独立模块,同步更新各 ViewModel 与单元测试,并补充素材管理 UI 与个人空间设置交互。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-13 11:01:08 +08:00

73 lines
3.0 KiB
Swift

//
// PaymentCollectionRecordViewModelTests.swift
// suixinkanTests
//
import XCTest
@testable import suixinkan
/// ViewModel
@MainActor
final class PaymentCollectionRecordViewModelTests: XCTestCase {
func testPaymentRecordGrouperGroupsByCreateDate() {
let response = RepaymentCollectionRecordResponse(
analyse: [
RepaymentCollectionRecordAnalyseItem(date: "2024-01-15", orderCount: 2, orderAmountSum: "150.00"),
RepaymentCollectionRecordAnalyseItem(date: "2024-01-14", orderCount: 1, orderAmountSum: "80.00"),
],
list: [
RepaymentCollectionRecordItem(
orderNumber: "NO001",
userPhone: "13800138000",
orderAmount: "100.00",
createDate: "2024-01-15",
createTime: "10:00:00"
),
RepaymentCollectionRecordItem(
orderNumber: "NO002",
userPhone: "13800138001",
orderAmount: "50.00",
createDate: "2024-01-15",
createTime: "11:00:00"
),
RepaymentCollectionRecordItem(
orderNumber: "NO003",
userPhone: "13800138002",
orderAmount: "80.00",
createDate: "2024-01-14",
createTime: "09:00:00"
),
]
)
let groups = PaymentRecordGrouper.group(response: response)
XCTAssertEqual(groups.count, 2)
XCTAssertEqual(groups[0].analyse.date, "2024-01-15")
XCTAssertEqual(groups[0].items.count, 2)
XCTAssertEqual(groups[1].analyse.date, "2024-01-14")
XCTAssertEqual(groups[1].items.count, 1)
}
func testLoadRecordUsesAPIAndGroupsResult() async {
let defaults = UserDefaults(suiteName: "PaymentCollectionRecordViewModelTests")!
defaults.removePersistentDomain(forName: "PaymentCollectionRecordViewModelTests")
let appStore = AppStore(defaults: defaults)
appStore.session.currentScenicId = 10
let recordJSON = """
{"code":100000,"msg":"success","data":{"analyse":[{"date":"2024-01-15","order_count":1,"order_amount_sum":"50.00"}],"list":[{"order_number":"NO001","user_phone":"13800138000","order_amount":"50.00","create_date":"2024-01-15","create_time":"10:00:00"}]}}
""".data(using: .utf8)!
let session = MockURLSession(responses: [recordJSON])
let api = PaymentAPI(client: APIClient(environment: .testing, session: session))
let viewModel = PaymentCollectionRecordViewModel(appStore: appStore)
await viewModel.loadRecord(api: api)
XCTAssertEqual(viewModel.groups.count, 1)
XCTAssertEqual(viewModel.groups[0].items.first?.orderNumber, "NO001")
XCTAssertTrue(session.requests.first?.url?.absoluteString.contains("photo-scan-order-list") == true)
}
}