95 lines
4.2 KiB
Swift
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)
|
|
}
|
|
}
|