91 lines
3.6 KiB
Swift
91 lines
3.6 KiB
Swift
import CodexBarCore
|
|
import Foundation
|
|
import Testing
|
|
@testable import CodexBar
|
|
|
|
@MainActor
|
|
extension CodexAccountScopedRefreshTests {
|
|
@Test
|
|
func `hard failure keeps trusted weekly baseline for later low observations`() async {
|
|
let suite = "CodexWeeklyResetFailureBaselineTests-hard-failure"
|
|
let email = "failure-baseline@example.com"
|
|
let settings = self.makeSettingsStore(suite: suite)
|
|
settings.refreshFrequency = .manual
|
|
settings.codexCookieSource = .off
|
|
settings._test_liveSystemCodexAccount = self.liveAccount(
|
|
email: email,
|
|
identity: .providerAccount(id: "failure-baseline-owner"))
|
|
defer { settings._test_liveSystemCodexAccount = nil }
|
|
|
|
let now = Date()
|
|
let boundary = now.addingTimeInterval(2 * 24 * 60 * 60)
|
|
let prior = self.codexWeeklySnapshot(
|
|
email: email,
|
|
weeklyUsedPercent: 73,
|
|
weeklyReset: boundary,
|
|
updatedAt: now.addingTimeInterval(-60))
|
|
let store = self.makeCodexWeeklyPublicationStore(settings: settings, suite: suite)
|
|
_ = await self.seedCodexWeeklyPublicationState(
|
|
store: store,
|
|
settings: settings,
|
|
snapshot: prior,
|
|
error: nil)
|
|
self.installFailingCodexProvider(
|
|
on: store,
|
|
error: TestRefreshError(message: "non-preservable failure"))
|
|
|
|
await store.refreshProvider(.codex, allowDisabled: true)
|
|
await store.refreshProvider(.codex, allowDisabled: true)
|
|
|
|
#expect(store.snapshots[.codex] == nil)
|
|
#expect(store.lastKnownResetSnapshots[.codex]?.updatedAt == prior.updatedAt)
|
|
#expect(store.lastCodexUsagePublicationGuard?.accountKey == email)
|
|
|
|
let primaryOnly = OpenAIDashboardSnapshot(
|
|
signedInEmail: email,
|
|
codeReviewRemainingPercent: nil,
|
|
creditEvents: [],
|
|
dailyBreakdown: [],
|
|
usageBreakdown: [],
|
|
creditsPurchaseURL: nil,
|
|
primaryLimit: RateWindow(
|
|
usedPercent: 18,
|
|
windowMinutes: 300,
|
|
resetsAt: now.addingTimeInterval(4 * 60 * 60),
|
|
resetDescription: nil),
|
|
secondaryLimit: nil,
|
|
creditsRemaining: nil,
|
|
accountPlan: "Pro",
|
|
updatedAt: now.addingTimeInterval(-40))
|
|
await store.applyOpenAIDashboard(
|
|
primaryOnly,
|
|
targetEmail: email,
|
|
allowCodexUsageBackfill: true)
|
|
let primaryOnlyPublishedAt = store.snapshots[.codex]?.updatedAt
|
|
#expect(primaryOnlyPublishedAt == primaryOnly.updatedAt)
|
|
#expect(store.snapshots[.codex]?.secondary == nil)
|
|
|
|
let loader = SequencedCodexSnapshotLoader(steps: [
|
|
.success(self.codexWeeklySnapshot(
|
|
email: email,
|
|
weeklyUsedPercent: 0.2,
|
|
weeklyReset: boundary,
|
|
updatedAt: now.addingTimeInterval(-30))),
|
|
.success(self.codexWeeklySnapshot(
|
|
email: email,
|
|
weeklyUsedPercent: 0.5,
|
|
weeklyReset: boundary,
|
|
updatedAt: now.addingTimeInterval(-20))),
|
|
])
|
|
self.installContextualCodexProvider(on: store) { _ in try await loader.load() }
|
|
|
|
await store.refreshProvider(.codex, allowDisabled: true)
|
|
|
|
#expect(await loader.callCount == 2)
|
|
#expect(store.snapshots[.codex]?.updatedAt == primaryOnlyPublishedAt)
|
|
#expect(store.snapshots[.codex]?.secondary == nil)
|
|
#expect(store.lastKnownResetSnapshots[.codex]?.updatedAt == prior.updatedAt)
|
|
#expect(store.lastKnownResetSnapshots[.codex]?.secondary?.usedPercent == 73)
|
|
}
|
|
}
|