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

49 lines
1.9 KiB
Swift

import CodexBarCore
import Testing
@testable import CodexBar
@MainActor
@Suite(.serialized)
struct ClaudeLoginFlowTests {
@Test
func `successful Claude login controller flow preserves selected source and enables provider`() async throws {
let registry = ProviderRegistry.shared
let claudeMetadata = try #require(registry.metadata[.claude])
for source in ClaudeUsageDataSource.allCases {
let settings = testSettingsStore(
suiteName: "ClaudeLoginFlowTests-controller-\(source.rawValue)")
settings.statusChecksEnabled = false
settings.refreshFrequency = .manual
settings.providerDetectionCompleted = true
settings.claudeUsageDataSource = source
settings.setProviderEnabled(provider: .claude, metadata: claudeMetadata, enabled: false)
let fetcher = UsageFetcher()
let store = UsageStore(
fetcher: fetcher,
browserDetection: BrowserDetection(cacheTTL: 0),
settings: settings)
await withStatusItemControllerForTesting(store: store, settings: settings, fetcher: fetcher) { controller in
let didLogin = await controller.runClaudeLoginFlow { _, onPhaseChange in
onPhaseChange(.requesting)
await Task.yield()
onPhaseChange(.waitingBrowser)
await Task.yield()
return ClaudeLoginRunner.Result(
outcome: .success,
output: "Successfully logged in",
authLink: nil)
}
#expect(didLogin)
#expect(controller.loginPhase == .idle)
}
#expect(settings.claudeUsageDataSource == source)
#expect(settings.isProviderEnabledCached(provider: .claude, metadataByProvider: registry.metadata))
}
}
}