49 lines
1.9 KiB
Swift
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))
|
|
}
|
|
}
|
|
}
|