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

95 lines
4.2 KiB
Swift

import CodexBarCore
import SwiftUI
import Testing
@testable import CodexBar
@MainActor
@Suite(.serialized)
struct QoderDashboardActionTests {
private func makeSettings() -> SettingsStore {
let suite = "QoderDashboardActionTests-\(UUID().uuidString)"
let defaults = UserDefaults(suiteName: suite)!
defaults.removePersistentDomain(forName: suite)
let settings = SettingsStore(
userDefaults: defaults,
configStore: testConfigStore(suiteName: suite),
zaiTokenStore: NoopZaiTokenStore(),
syntheticTokenStore: NoopSyntheticTokenStore())
settings.providerDetectionCompleted = true
settings.statusChecksEnabled = false
settings.refreshFrequency = .manual
return settings
}
private func makeStore(settings: SettingsStore) -> UsageStore {
let fetcher = UsageFetcher()
return UsageStore(fetcher: fetcher, browserDetection: BrowserDetection(cacheTTL: 0), settings: settings)
}
private func makeContext(settings: SettingsStore, store: UsageStore) -> ProviderSettingsContext {
ProviderSettingsContext(
provider: .qoder,
settings: settings,
store: store,
boolBinding: { keyPath in
Binding(
get: { settings[keyPath: keyPath] },
set: { settings[keyPath: keyPath] = $0 })
},
stringBinding: { keyPath in
Binding(
get: { settings[keyPath: keyPath] },
set: { settings[keyPath: keyPath] = $0 })
},
statusText: { _ in nil },
setStatusText: { _, _ in },
lastAppActiveRunAt: { _ in nil },
setLastAppActiveRunAt: { _, _ in },
requestConfirmation: { _ in },
runLoginFlow: {})
}
@Test
func `qoder dashboard action follows current manual header`() {
let settings = self.makeSettings()
settings.qoderCookieSource = .manual
settings.qoderCookieHeader = "curl https://qoder.com.cn -H 'Cookie: sid=abc'"
let store = self.makeStore(settings: settings)
let context = self.makeContext(settings: settings, store: store)
let fields = QoderProviderImplementation().settingsFields(context: context)
let action = fields.first { $0.id == "qoder-cookie" }?.actions.first { $0.id == "qoder-open-usage" }
#expect(action != nil)
#expect(QoderProviderImplementation.usageDashboardURL(settings: settings) == QoderWebSite.china.dashboardURL)
#expect(QoderProviderDescriptor.dashboardURL(
settings: settings.qoderSettingsSnapshot(tokenOverride: nil),
sourceLabel: "manual / qoder.com") == QoderWebSite.china.dashboardURL)
settings.qoderCookieHeader = "curl https://qoder.com -H 'Host: qoder.com.cn' -H 'Cookie: sid=abc'"
#expect(QoderProviderImplementation.usageDashboardURL(settings: settings) ==
QoderWebSite.international.dashboardURL)
settings.qoderCookieHeader = "curl https://qoder.com -H 'Cookie: sid=abc'"
#expect(QoderProviderImplementation.usageDashboardURL(settings: settings) ==
QoderWebSite.international.dashboardURL)
}
@Test
func `qoder dashboard route trusts generated source label suffix only`() {
let automatic = ProviderSettingsSnapshot.QoderProviderSettings(cookieSource: .auto, manualCookieHeader: nil)
#expect(QoderProviderDescriptor.dashboardURL(
settings: automatic,
sourceLabel: "Chrome Profile qoder.com.cn / qoder.com") == QoderWebSite.international.dashboardURL)
#expect(QoderProviderDescriptor.dashboardURL(
settings: automatic,
sourceLabel: "Chrome Profile qoder.com / qoder.com.cn") == QoderWebSite.china.dashboardURL)
#expect(QoderProviderDescriptor.dashboardURL(
settings: automatic,
sourceLabel: "Chrome Profile qoder.com.cn") == QoderWebSite.international.dashboardURL)
#expect(QoderProviderDescriptor.dashboardURL(
settings: automatic,
sourceLabel: "Chrome Profile / qoder.com.cn/extra") == QoderWebSite.international.dashboardURL)
}
}