163 lines · 6.0 KB · Swift
RawDownload
import CodexBarCoreimport Foundationimport Testing@testable import CodexBar @MainActor@Suitestruct SettingsStoreTests {    @Test    func defaultRefreshFrequencyIsFiveMinutes() {        let suite = "SettingsStoreTests-default"        let defaults = UserDefaults(suiteName: suite)!        defaults.removePersistentDomain(forName: suite)         let store = SettingsStore(userDefaults: defaults, zaiTokenStore: NoopZaiTokenStore())         #expect(store.refreshFrequency == .fiveMinutes)        #expect(store.refreshFrequency.seconds == 300)    }     @Test    func persistsRefreshFrequencyAcrossInstances() {        let suite = "SettingsStoreTests-persist"        let defaultsA = UserDefaults(suiteName: suite)!        defaultsA.removePersistentDomain(forName: suite)        let storeA = SettingsStore(userDefaults: defaultsA, zaiTokenStore: NoopZaiTokenStore())         storeA.refreshFrequency = .fifteenMinutes         let defaultsB = UserDefaults(suiteName: suite)!        let storeB = SettingsStore(userDefaults: defaultsB, zaiTokenStore: NoopZaiTokenStore())         #expect(storeB.refreshFrequency == .fifteenMinutes)        #expect(storeB.refreshFrequency.seconds == 900)    }     @Test    func persistsSelectedMenuProviderAcrossInstances() {        let suite = "SettingsStoreTests-selectedMenuProvider"        let defaultsA = UserDefaults(suiteName: suite)!        defaultsA.removePersistentDomain(forName: suite)        let storeA = SettingsStore(userDefaults: defaultsA, zaiTokenStore: NoopZaiTokenStore())         storeA.selectedMenuProvider = .claude         let defaultsB = UserDefaults(suiteName: suite)!        let storeB = SettingsStore(userDefaults: defaultsB, zaiTokenStore: NoopZaiTokenStore())         #expect(storeB.selectedMenuProvider == .claude)    }     @Test    func persistsOpenCodeWorkspaceIDAcrossInstances() {        let suite = "SettingsStoreTests-opencode-workspace"        let defaultsA = UserDefaults(suiteName: suite)!        defaultsA.removePersistentDomain(forName: suite)        let storeA = SettingsStore(userDefaults: defaultsA, zaiTokenStore: NoopZaiTokenStore())         storeA.opencodeWorkspaceID = "wrk_01KEJ50SHK9YR41HSRSJ6QTFCM"         let defaultsB = UserDefaults(suiteName: suite)!        let storeB = SettingsStore(userDefaults: defaultsB, zaiTokenStore: NoopZaiTokenStore())         #expect(storeB.opencodeWorkspaceID == "wrk_01KEJ50SHK9YR41HSRSJ6QTFCM")    }     @Test    func defaultsSessionQuotaNotificationsToEnabled() {        let key = "sessionQuotaNotificationsEnabled"        let suite = "SettingsStoreTests-sessionQuotaNotifications"        let defaults = UserDefaults(suiteName: suite)!        defaults.removePersistentDomain(forName: suite)        let store = SettingsStore(userDefaults: defaults, zaiTokenStore: NoopZaiTokenStore())        #expect(store.sessionQuotaNotificationsEnabled == true)        #expect(defaults.bool(forKey: key) == true)    }     @Test    func defaultsClaudeUsageSourceToAuto() {        let suite = "SettingsStoreTests-claude-source"        let defaults = UserDefaults(suiteName: suite)!        defaults.removePersistentDomain(forName: suite)         let store = SettingsStore(userDefaults: defaults, zaiTokenStore: NoopZaiTokenStore())         #expect(store.claudeUsageDataSource == .auto)    }     @Test    func defaultsCodexUsageSourceToAuto() {        let suite = "SettingsStoreTests-codex-source"        let defaults = UserDefaults(suiteName: suite)!        defaults.removePersistentDomain(forName: suite)         let store = SettingsStore(userDefaults: defaults, zaiTokenStore: NoopZaiTokenStore())         #expect(store.codexUsageDataSource == .auto)    }     @Test    func defaultsOpenAIWebAccessToEnabled() {        let suite = "SettingsStoreTests-openai-web"        let defaults = UserDefaults(suiteName: suite)!        defaults.removePersistentDomain(forName: suite)         let store = SettingsStore(userDefaults: defaults, zaiTokenStore: NoopZaiTokenStore())         #expect(store.openAIWebAccessEnabled == true)        #expect(defaults.bool(forKey: "openAIWebAccessEnabled") == true)        #expect(store.codexCookieSource == .auto)    }     @Test    func providerOrder_defaultsToAllCases() {        let suite = "SettingsStoreTests-providerOrder-default"        let defaults = UserDefaults(suiteName: suite)!        defaults.removePersistentDomain(forName: suite)        defaults.set(true, forKey: "providerDetectionCompleted")         let store = SettingsStore(userDefaults: defaults, zaiTokenStore: NoopZaiTokenStore())         #expect(store.orderedProviders() == UsageProvider.allCases)    }     @Test    func providerOrder_persistsAndAppendsNewProviders() {        let suite = "SettingsStoreTests-providerOrder-persist"        let defaultsA = UserDefaults(suiteName: suite)!        defaultsA.removePersistentDomain(forName: suite)        defaultsA.set(true, forKey: "providerDetectionCompleted")         // Partial list to mimic "older version" missing providers.        defaultsA.set([UsageProvider.gemini.rawValue, UsageProvider.codex.rawValue], forKey: "providerOrder")         let storeA = SettingsStore(userDefaults: defaultsA, zaiTokenStore: NoopZaiTokenStore())         #expect(storeA.orderedProviders() == [            .gemini,            .codex,            .claude,            .cursor,            .opencode,            .factory,            .antigravity,            .copilot,            .zai,            .minimax,            .kiro,            .vertexai,            .augment,        ])         // Move one provider; ensure it's persisted across instances.        let antigravityIndex = storeA.orderedProviders().firstIndex(of: .antigravity)!        storeA.moveProvider(fromOffsets: IndexSet(integer: antigravityIndex), toOffset: 0)         let defaultsB = UserDefaults(suiteName: suite)!        defaultsB.set(true, forKey: "providerDetectionCompleted")        let storeB = SettingsStore(userDefaults: defaultsB, zaiTokenStore: NoopZaiTokenStore())         #expect(storeB.orderedProviders().first == .antigravity)    }}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t