feat: 优化账号注销流程

This commit is contained in:
2026-08-31 15:56:16 +08:00
parent e529bb5942
commit 4444d328df
16 changed files with 982 additions and 208 deletions
@@ -21,7 +21,7 @@ final class StoreAccountDeregistrationAccessTests: XCTestCase {
}
}
/// 在 iPhone 上渲染冷静期页面,确认撤销入口可见;不调用真实网络或修改接口。
/// 在 iPhone 上渲染不可返回的冷静期页面,只保留退出和撤销入口。
func testCoolingPageRendersCancellationEntryOnPhysicalDevice() async throws {
let name = "DeregistrationCoolingPage.\(UUID().uuidString)"
let defaults = UserDefaults(suiteName: name)!
@@ -30,6 +30,7 @@ final class StoreAccountDeregistrationAccessTests: XCTestCase {
session.accountType = .storeUser
session.userId = "101"
session.token = "isolated-token"
session.accountDisplayName = "示例门店"
let identity = try StoreAccountDeregistrationIdentity(session: session)
let service = try DeregistrationCancellationStub()
let controller = StoreAccountDeregistrationAccessViewController(identity: identity, api: service, session: session) { _ in
@@ -50,11 +51,16 @@ final class StoreAccountDeregistrationAccessTests: XCTestCase {
window.layoutIfNeeded()
XCTAssertFalse(cancel.isHidden)
XCTAssertTrue(cancel.isEnabled)
XCTAssertTrue(message.text?.contains("处于冷静期") == true)
XCTAssertTrue(message.text?.contains("当前身份:") == true)
let deadline = try XCTUnwrap(views.first { $0.accessibilityIdentifier == "deregister.access.deadline" } as? UILabel)
XCTAssertEqual(deadline.text, "2026-09-04 14:23:40")
XCTAssertFalse(message.text?.contains("604776") == true)
XCTAssertTrue(window.bounds.contains(cancel.convert(cancel.bounds, to: window)))
XCTAssertTrue(controller.navigationItem.hidesBackButton)
XCTAssertEqual((window.rootViewController as? UINavigationController)?.interactivePopGestureRecognizer?.isEnabled, false)
let texts = views.compactMap { ($0 as? UILabel)?.text }
XCTAssertTrue(texts.contains("重新登录该身份自动撤销申请"))
XCTAssertNil(views.first { $0.accessibilityIdentifier == "deregister.access.conditions" })
let attachment = XCTAttachment(image: UIGraphicsImageRenderer(bounds: window.bounds).image { context in
window.layer.render(in: context.cgContext)
})