fix(analytics): prevent database locks during suspension

This commit is contained in:
Rocky
2026-08-21 21:13:13 +08:00
parent 7bd77509b6
commit ac374631ae
11 changed files with 599 additions and 155 deletions
@@ -452,6 +452,37 @@ final class AnalyticsRepositoryTests: XCTestCase {
eventTypes = await repository.debugSnapshot().pendingEvents.compactMap(\.eventType)
XCTAssertEqual(Set(eventTypes), [.firstOpen, .aiFeatureSucceeded])
}
func testSuspendedDatabaseDropsRecordsUntilExplicitResume() async throws {
let repository = AnalyticsRepository(
configuration: AnalyticsRepositoryConfiguration(
databaseURL: try analyticsTemporaryDatabaseURL()
),
clock: AnalyticsTestWallClock(),
uuidGenerator: AnalyticsTestUUIDGenerator()
)
await repository.record(
eventType: .keyboardActivated,
context: analyticsTestContext
)
await repository.suspendDatabaseAccess()
await repository.record(
eventType: .keyboardActivated,
context: analyticsTestContext
)
let suspendedSnapshot = await repository.debugSnapshot()
XCTAssertFalse(suspendedSnapshot.isAvailable)
await repository.resumeDatabaseAccess()
await repository.record(
eventType: .keyboardActivated,
context: analyticsTestContext
)
let resumedSnapshot = await repository.debugSnapshot()
XCTAssertTrue(resumedSnapshot.isAvailable)
XCTAssertEqual(resumedSnapshot.pendingEvents.count, 2)
}
}
private extension Array {