实现我的 Tab、对齐 Android 流程并接入 OSS 上传
This commit is contained in:
77
suixinkanTests/AccountSwitchViewModelTests.swift
Normal file
77
suixinkanTests/AccountSwitchViewModelTests.swift
Normal file
@ -0,0 +1,77 @@
|
||||
//
|
||||
// AccountSwitchViewModelTests.swift
|
||||
// suixinkanTests
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
@MainActor
|
||||
/// 账号切换 ViewModel 测试。
|
||||
final class AccountSwitchViewModelTests: XCTestCase {
|
||||
func testLoadFiltersInvalidAccounts() async throws {
|
||||
let json = """
|
||||
{
|
||||
"code": 100000,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"token": "token",
|
||||
"scenic_users": [
|
||||
{
|
||||
"account_type": "scenic_user",
|
||||
"id": 1,
|
||||
"user_id": 1,
|
||||
"scenic_user_id": 1,
|
||||
"ss_user_id": 9001,
|
||||
"username": "u1",
|
||||
"real_name": "张三",
|
||||
"nickname": "张三",
|
||||
"phone": "13800138000",
|
||||
"scenic_id": 10,
|
||||
"scenic_name": "景区A",
|
||||
"is_current": true
|
||||
}
|
||||
],
|
||||
"store_users": []
|
||||
}
|
||||
}
|
||||
""".data(using: .utf8)!
|
||||
|
||||
let session = MockURLSession(responses: [json])
|
||||
let api = ProfileAPI(client: APIClient(environment: .testing, session: session))
|
||||
let viewModel = AccountSwitchViewModel()
|
||||
|
||||
try await viewModel.load(api: api, force: true)
|
||||
|
||||
XCTAssertEqual(viewModel.accounts.count, 1)
|
||||
XCTAssertEqual(viewModel.selectedAccount?.businessUserId, 9001)
|
||||
}
|
||||
|
||||
func testSwitchAccountThrowsWhenBusinessUserIdInvalid() async {
|
||||
let viewModel = AccountSwitchViewModel()
|
||||
let account = AccountSwitchAccount(
|
||||
accountType: V9ScenicUser.accountTypeValue,
|
||||
businessUserId: 0,
|
||||
title: "景区A",
|
||||
subtitle: "张三",
|
||||
phone: "13800138000",
|
||||
avatar: "",
|
||||
scenicName: "景区A",
|
||||
storeId: nil,
|
||||
storeName: "",
|
||||
scenicId: 10,
|
||||
isCurrent: false
|
||||
)
|
||||
let authAPI = AuthAPI(client: APIClient(environment: .testing, session: MockURLSession(responses: [])))
|
||||
|
||||
do {
|
||||
_ = try await viewModel.switchAccount(account, api: authAPI)
|
||||
XCTFail("无效账号应失败")
|
||||
} catch {
|
||||
guard let switchError = error as? AccountSwitchError else {
|
||||
return XCTFail("期望 AccountSwitchError,实际为 \(error)")
|
||||
}
|
||||
XCTAssertEqual(switchError, .invalidAccount)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user