fix: use v9 store status for deregistration login
This commit is contained in:
@@ -48,6 +48,42 @@ final class LoginViewModelTests: XCTestCase {
|
||||
XCTAssertEqual(session.requests.map { $0.url?.path }, ["/api/app/v9/login", "/api/app/v9/set-user"])
|
||||
}
|
||||
|
||||
/// 单一门店身份处于注销冷静期时,必须先返回确认状态,不能自动调用 set-user 撤销申请。
|
||||
func testSingleCoolingOffStoreAccountRequiresConfirmationBeforeSetUser() async throws {
|
||||
let login = Data(#"{"code":100000,"data":{"token":"temporary","scenic_users":[],"store_users":[{"store_user_id":101,"store_name":"待注销门店","status":2}]}}"#.utf8)
|
||||
let selected = Data(#"{"code":100000,"data":{"token":"business","scenic_users":[],"store_users":[]}}"#.utf8)
|
||||
let session = MockURLSession(responses: [login, selected])
|
||||
let viewModel = LoginViewModel()
|
||||
viewModel.updateAccount("13900000001")
|
||||
viewModel.updatePassword("test-password")
|
||||
let api = AuthAPI(client: APIClient(environment: .testing, session: session))
|
||||
|
||||
let resolution = try await viewModel.login(authAPI: api)
|
||||
|
||||
guard case let .needsDeregistrationConfirmation(confirmation) = resolution else {
|
||||
return XCTFail("冷静期门店身份应等待用户确认")
|
||||
}
|
||||
XCTAssertEqual(confirmation.account.status, 2)
|
||||
XCTAssertEqual(session.requests.map { $0.url?.path }, ["/api/app/v9/login"])
|
||||
|
||||
let response = try await viewModel.confirmDeregistrationLogin(confirmation, authAPI: api)
|
||||
|
||||
XCTAssertEqual(response.token, "business")
|
||||
XCTAssertEqual(session.requests.map { $0.url?.path }, ["/api/app/v9/login", "/api/app/v9/set-user"])
|
||||
}
|
||||
|
||||
/// 冷静期确认弹窗需明确告知登录将撤销注销申请,并提供保留申请的取消入口。
|
||||
func testDeregistrationLoginAlertExplainsAutomaticCancellation() {
|
||||
let alert = makeDeregistrationLoginAlert(
|
||||
account: reentryAccount(isStore: true, status: 2),
|
||||
onConfirm: {}
|
||||
)
|
||||
|
||||
XCTAssertEqual(alert.title, "该账号正在注销")
|
||||
XCTAssertTrue(alert.message?.contains("自动撤销之前的注销申请") == true)
|
||||
XCTAssertEqual(alert.actions.map(\.title), ["暂不登录", "确认登录"])
|
||||
}
|
||||
|
||||
/// 普通门店身份选择直接回调,不再无条件弹出注销提示。
|
||||
func testSelectingStoreIdentityContinuesWithoutDeregistrationPrompt() throws {
|
||||
let account = reentryAccount(isStore: true)
|
||||
@@ -157,7 +193,7 @@ final class LoginViewModelTests: XCTestCase {
|
||||
XCTAssertNil(controller.presentedViewController)
|
||||
}
|
||||
|
||||
private func reentryAccount(isStore: Bool) -> AccountSwitchAccount {
|
||||
private func reentryAccount(isStore: Bool, status: Int = 1) -> AccountSwitchAccount {
|
||||
AccountSwitchAccount(
|
||||
accountType: isStore ? "store_user" : "scenic_user",
|
||||
businessUserId: 101,
|
||||
@@ -170,6 +206,7 @@ final class LoginViewModelTests: XCTestCase {
|
||||
storeId: isStore ? 25 : nil,
|
||||
storeName: isStore ? "测试门店" : "",
|
||||
scenicId: 10,
|
||||
status: status,
|
||||
isCurrent: false
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user