feat(app): add flow diagnostics and refine interface
CI / Validate manifests (push) Has been cancelled
CI / SwiftLint (push) Has been cancelled
CI / iOS / Extension (push) Has been cancelled
CI / macOS (push) Has been cancelled

Improve failure recovery visibility, strengthen account-session handling, and make the cross-platform interface more consistent.
This commit is contained in:
Rocky
2026-08-26 14:40:06 +08:00
parent 1ee032bdb9
commit 39002336c0
78 changed files with 2737 additions and 735 deletions
@@ -437,6 +437,37 @@ final class AccountAPIClientTests: XCTestCase {
XCTAssertEqual(requests.single?.url?.path, "/v1/auth/logout")
}
func testLogoutClearFailureRetainsSessionForRetry() async throws {
let retained = makeAccountSession()
let store = InMemoryAccountSecurityStore(
session: retained,
sessionClearFailures: 1
)
let transport = QueueAccountTransport([])
let client = AccountAPIClient(
baseURL: URL(string: "https://account.test")!,
transport: transport,
sessionVault: store
)
do {
try await client.logout()
XCTFail("Expected the first Keychain deletion to fail")
} catch let error as AccountAPIError {
XCTAssertEqual(error, .secureStorage)
}
let sessionAfterFailure = await store.session
let cachedSessionAfterFailure = try await client.currentSession()
XCTAssertEqual(sessionAfterFailure, retained)
XCTAssertEqual(cachedSessionAfterFailure, retained)
try await client.logout()
let sessionAfterRetry = await store.session
XCTAssertNil(sessionAfterRetry)
}
func testDeleteAccountUsesAuthenticatedDeleteAndClearsPrivateSession() async throws {
let store = InMemoryAccountSecurityStore(session: makeAccountSession())
let transport = QueueAccountTransport([