From 9b65913bc4a5cf7faaac3afe3a1fecb0b39cb4a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=89=E7=A7=8B?= <497055328@qq.com> Date: Mon, 31 Aug 2026 17:01:26 +0800 Subject: [PATCH] fix: confirm cooling off account switch --- .../Profile/AccountSwitchViewController.swift | 10 +++++++ .../AccountSwitchViewModelTests.swift | 28 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/suixinkan/UI/Profile/AccountSwitchViewController.swift b/suixinkan/UI/Profile/AccountSwitchViewController.swift index a4adeeb..91dfaa9 100644 --- a/suixinkan/UI/Profile/AccountSwitchViewController.swift +++ b/suixinkan/UI/Profile/AccountSwitchViewController.swift @@ -120,6 +120,16 @@ final class AccountSwitchViewController: BaseViewController, UITableViewDelegate navigationController?.popViewController(animated: true) return } + if account.requiresDeregistrationConfirmation { + present( + makeDeregistrationLoginAlert(account: account) { [weak self] in + guard let self else { return } + Task { await self.switchAccount(account) } + }, + animated: true + ) + return + } Task { await switchAccount(account) } } diff --git a/suixinkanTests/AccountSwitchViewModelTests.swift b/suixinkanTests/AccountSwitchViewModelTests.swift index d4a78b4..95f97bf 100644 --- a/suixinkanTests/AccountSwitchViewModelTests.swift +++ b/suixinkanTests/AccountSwitchViewModelTests.swift @@ -47,6 +47,34 @@ final class AccountSwitchViewModelTests: XCTestCase { XCTAssertEqual(viewModel.selectedAccount?.businessUserId, 9001) } + func testSwitchableAccountsPreserveCoolingOffStoreStatus() async throws { + let json = """ + { + "code": 100000, + "msg": "success", + "data": { + "store_users": [ + { + "account_type": "store_user", + "store_user_id": 2001, + "store_name": "冷静期门店", + "status": 2 + } + ] + } + } + """.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.first?.status, 2) + XCTAssertTrue(viewModel.accounts.first?.requiresDeregistrationConfirmation == true) + } + func testSwitchAccountThrowsWhenBusinessUserIdInvalid() async { let viewModel = AccountSwitchViewModel() let account = AccountSwitchAccount(