// // AuthModelsTests.swift // suixinkanTests // import XCTest @testable import suixinkan /// Auth 模块模型测试,覆盖 v9 登录响应解码和账号转换规则。 final class AuthModelsTests: XCTestCase { func testV9AuthResponseDecodesMultiAccountJSON() throws { let json = """ { "code": 100000, "msg": "success", "data": { "token": "person-temp-token", "scenic_users": [ { "account_type": "scenic_user", "id": 101, "user_id": 101, "scenic_user_id": 101, "ss_user_id": 101, "username": "scenic_admin", "real_name": "张三", "nickname": "张三", "phone": "13800138000", "scenic_id": 10, "scenic_name": "示例景区", "is_current": false } ], "store_users": [ { "account_type": "store_user", "id": 201, "user_id": 201, "store_user_id": 201, "username": "store_admin", "user_name": "store_admin", "real_name": "李四", "phone": "13900139000", "avatar": "", "scenic_id": 10, "scenic_name": "示例景区", "store_id": 20, "store_name": "示例门店", "is_current": false } ] } } """.data(using: .utf8)! let envelope = try JSONDecoder().decode(APIEnvelope.self, from: json) let response = try XCTUnwrap(envelope.data) XCTAssertEqual(response.token, "person-temp-token") XCTAssertEqual(response.accounts.map(\.businessUserId), [101, 201]) } func testV9AuthResponseDecodesMissingAccountListsAsEmpty() throws { let json = """ { "code": 100000, "msg": "success", "data": { "token": "only-token" } } """.data(using: .utf8)! let envelope = try JSONDecoder().decode(APIEnvelope.self, from: json) let response = try XCTUnwrap(envelope.data) XCTAssertEqual(response.token, "only-token") XCTAssertTrue(response.scenicUsers.isEmpty) XCTAssertTrue(response.storeUsers.isEmpty) } func testV9ScenicUserBusinessUserIdPrefersSsUserId() throws { let json = """ { "account_type": "scenic_user", "id": "1", "user_id": 2, "scenic_user_id": 3, "ss_user_id": 101, "username": "scenic_admin", "real_name": "张三", "nickname": "张三", "phone": "13800138000", "scenic_id": 10, "scenic_name": "示例景区", "is_current": false } """.data(using: .utf8)! let user = try JSONDecoder().decode(V9ScenicUser.self, from: json) XCTAssertEqual(user.businessUserId, 101) XCTAssertEqual(user.toAccountSwitchAccount().toSetUserRequest(), SetUserRequest(ssUserId: 101)) } func testV9StoreUserBusinessUserIdPrefersStoreUserId() throws { let json = """ { "account_type": "store_user", "id": 1, "user_id": 2, "store_user_id": 201, "username": "store_admin", "user_name": "store_admin", "real_name": "张三", "phone": "13800138000", "avatar": "", "scenic_id": 10, "scenic_name": "示例景区", "store_id": 20, "store_name": "示例门店", "is_current": false } """.data(using: .utf8)! let user = try JSONDecoder().decode(V9StoreUser.self, from: json) XCTAssertEqual(user.businessUserId, 201) XCTAssertEqual(user.toAccountSwitchAccount().toSetUserRequest(), SetUserRequest(storeUserId: 201)) } }