Files
steipete--codexbar/Tests/CodexBarTests/OpenAIWebRefreshGateTests.swift
2026-07-13 12:22:33 +08:00

189 lines
5.7 KiB
Swift

import Foundation
import Testing
@testable import CodexBar
struct OpenAIWebRefreshGateTests {
@Test
func `Battery saver keeps background OpenAI web refreshes off`() {
let shouldRun = UsageStore.shouldRunOpenAIWebRefresh(.init(
accessEnabled: true,
batterySaverEnabled: true,
force: false,
refreshPhase: .regular))
#expect(shouldRun == false)
}
@Test
func `Disabling battery saver restores normal OpenAI web refreshes`() {
let shouldRun = UsageStore.shouldRunOpenAIWebRefresh(.init(
accessEnabled: true,
batterySaverEnabled: false,
force: false,
refreshPhase: .regular))
#expect(shouldRun == true)
}
@Test
func `Manual refresh still forces OpenAI web refreshes with battery saver enabled`() {
let shouldRun = UsageStore.shouldRunOpenAIWebRefresh(.init(
accessEnabled: true,
batterySaverEnabled: true,
force: true,
refreshPhase: .regular))
#expect(shouldRun == true)
}
@Test
func `Startup skips automatic OpenAI web refreshes`() {
let shouldRun = UsageStore.shouldRunOpenAIWebRefresh(.init(
accessEnabled: true,
batterySaverEnabled: false,
force: false,
refreshPhase: .startup))
#expect(shouldRun == false)
}
@Test
func `Startup connectivity retry remains startup only for OpenAI web refresh gate`() {
let providerPhase = UsageStore.refreshPhase(
hasCompletedInitialRefresh: true)
let openAIWebPhase = UsageStore.openAIWebRefreshPhase(
providerRefreshPhase: providerPhase,
startupConnectivityRetryAttempt: 1)
let shouldRun = UsageStore.shouldRunOpenAIWebRefresh(.init(
accessEnabled: true,
batterySaverEnabled: false,
force: false,
refreshPhase: openAIWebPhase))
#expect(providerPhase == .regular)
#expect(openAIWebPhase == .startup)
#expect(shouldRun == false)
}
@Test
func `Manual startup refresh still forces OpenAI web refreshes`() {
let shouldRun = UsageStore.shouldRunOpenAIWebRefresh(.init(
accessEnabled: true,
batterySaverEnabled: true,
force: true,
refreshPhase: .startup))
#expect(shouldRun == true)
}
@Test
func `Battery saver stale-submenu refresh respects the cooldown`() {
let shouldForce = UsageStore.forceOpenAIWebRefreshForStaleRequest(batterySaverEnabled: true)
#expect(shouldForce == false)
}
@Test
func `Normal stale-submenu refresh still forces when battery saver is off`() {
let shouldForce = UsageStore.forceOpenAIWebRefreshForStaleRequest(batterySaverEnabled: false)
#expect(shouldForce == true)
}
@Test
func `Recent successful dashboard refresh stays throttled`() {
let now = Date()
let shouldSkip = UsageStore.shouldSkipOpenAIWebRefresh(.init(
force: false,
accountDidChange: false,
lastError: nil,
lastSnapshotAt: now.addingTimeInterval(-60),
lastAttemptAt: now.addingTimeInterval(-60),
now: now,
refreshInterval: 300))
#expect(shouldSkip == true)
}
@Test
func `Recent failed dashboard refresh also stays throttled`() {
let now = Date()
let shouldSkip = UsageStore.shouldSkipOpenAIWebRefresh(.init(
force: false,
accountDidChange: false,
lastError: "login required",
lastSnapshotAt: nil,
lastAttemptAt: now.addingTimeInterval(-60),
now: now,
refreshInterval: 300))
#expect(shouldSkip == true)
}
@Test
func `Force refresh bypasses throttle after failures`() {
let now = Date()
let shouldSkip = UsageStore.shouldSkipOpenAIWebRefresh(.init(
force: true,
accountDidChange: false,
lastError: "login required",
lastSnapshotAt: nil,
lastAttemptAt: now.addingTimeInterval(-60),
now: now,
refreshInterval: 300))
#expect(shouldSkip == false)
}
@Test
func `Account switches bypass the prior-attempt cooldown`() {
let now = Date()
let shouldSkip = UsageStore.shouldSkipOpenAIWebRefresh(.init(
force: false,
accountDidChange: true,
lastError: "mismatch",
lastSnapshotAt: nil,
lastAttemptAt: now.addingTimeInterval(-60),
now: now,
refreshInterval: 300))
#expect(shouldSkip == false)
}
@Test
func `Empty dashboard history retry is throttled after a recent attempt`() {
let now = Date()
let shouldSkip = UsageStore.shouldSkipOpenAIWebEmptyHistoryRetry(.init(
force: false,
accountDidChange: false,
lastError: nil,
lastSnapshotAt: now.addingTimeInterval(-120),
lastAttemptAt: now.addingTimeInterval(-60),
now: now,
refreshInterval: 300))
#expect(shouldSkip == true)
}
@Test
func `Empty dashboard history retry runs once for a newer empty snapshot`() {
let now = Date()
let shouldSkip = UsageStore.shouldSkipOpenAIWebEmptyHistoryRetry(.init(
force: false,
accountDidChange: false,
lastError: nil,
lastSnapshotAt: now.addingTimeInterval(-60),
lastAttemptAt: now.addingTimeInterval(-120),
now: now,
refreshInterval: 300))
#expect(shouldSkip == false)
}
}