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

80 lines
3.0 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
@MainActor
@Suite(.serialized)
struct StatusMenuScopedCodexRefreshTests {
@Test
func `scoped refresh reconciles usage after dashboard login expires`() async {
let settings = self.makeSettings()
settings.refreshFrequency = .manual
settings.statusChecksEnabled = false
settings.openAIWebAccessEnabled = true
settings.codexCookieSource = .auto
self.enableOnlyCodex(settings)
let account = AccountInfo(email: "test@example.com", plan: "pro")
let fetcher = UsageFetcher()
let store = UsageStore(fetcher: fetcher, browserDetection: BrowserDetection(cacheTTL: 0), settings: settings)
store.accountInfoCache[.codex] = UsageStore.AccountInfoCacheEntry(
account: account,
configRevision: settings.configRevision,
expiresAt: .distantFuture)
let controller = StatusItemController(
store: store,
settings: settings,
account: account,
updater: DisabledUpdaterController(),
preferencesSelection: PreferencesSelection(),
statusBar: .system)
var providerRefreshes = 0
store._test_providerRefreshOverride = { provider in
#expect(provider == .codex)
providerRefreshes += 1
}
store._test_tokenUsageRefreshOverride = { _, _ in }
store._test_codexCreditsLoaderOverride = {
CreditsSnapshot(remaining: 25, events: [], updatedAt: Date())
}
store._test_openAIDashboardLoaderOverride = { _, _, _, _ in
throw OpenAIDashboardFetcher.FetchError.loginRequired
}
store._test_openAIDashboardCookieImportOverride = { targetEmail, _, _, _, _ in
OpenAIDashboardBrowserCookieImporter.ImportResult(
sourceLabel: "Chrome",
cookieCount: 2,
signedInEmail: targetEmail,
matchesCodexEmail: true)
}
await controller.performStoreRefresh(
for: .codex,
refreshOpenMenusWhenComplete: false,
interaction: .userInitiated)
#expect(store.openAIDashboardRequiresLogin)
#expect(providerRefreshes == 2)
}
private func makeSettings() -> SettingsStore {
let suite = "StatusMenuScopedCodexRefreshTests-\(UUID().uuidString)"
let defaults = UserDefaults(suiteName: suite)!
defaults.removePersistentDomain(forName: suite)
return SettingsStore(
userDefaults: defaults,
configStore: testConfigStore(suiteName: suite),
zaiTokenStore: NoopZaiTokenStore(),
syntheticTokenStore: NoopSyntheticTokenStore())
}
private func enableOnlyCodex(_ settings: SettingsStore) {
for provider in UsageProvider.allCases {
guard let metadata = ProviderRegistry.shared.metadata[provider] else { continue }
settings.setProviderEnabled(provider: provider, metadata: metadata, enabled: provider == .codex)
}
}
}