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

88 lines
3.7 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
extension StatusMenuTests {
@Test
func `overview card model follows usage display preference`() throws {
let settings = self.makeSettings()
settings.statusChecksEnabled = false
settings.refreshFrequency = .manual
let store = self.makeCodexStore(settings: settings, dashboardAuthorized: false)
let controller = StatusItemController(
store: store,
settings: settings,
account: UsageFetcher().loadAccountInfo(),
updater: DisabledUpdaterController(),
preferencesSelection: PreferencesSelection(),
statusBar: self.makeStatusBarForTesting())
defer { controller.releaseStatusItemsForTesting() }
settings.usageBarsShowUsed = false
let remainingMetric = try #require(controller.menuCardModel(for: .codex)?.metrics.first { $0.id == "primary" })
#expect(remainingMetric.percent == 78)
#expect(remainingMetric.percentStyle.rawValue == "left")
settings.usageBarsShowUsed = true
let usedMetric = try #require(controller.menuCardModel(for: .codex)?.metrics.first { $0.id == "primary" })
#expect(usedMetric.percent == 22)
#expect(usedMetric.percentStyle.rawValue == "used")
}
@Test
func `status menu card follows codex spark visibility`() throws {
let settings = self.makeSettings()
settings.statusChecksEnabled = false
settings.refreshFrequency = .manual
let store = self.makeCodexStore(settings: settings, dashboardAuthorized: false)
let now = Date()
store._setSnapshotForTesting(
UsageSnapshot(
primary: RateWindow(
usedPercent: 22,
windowMinutes: 300,
resetsAt: now.addingTimeInterval(1800),
resetDescription: nil),
secondary: nil,
tertiary: nil,
extraRateWindows: [
NamedRateWindow(
id: CodexAdditionalRateLimitMapper.sparkWindowID,
title: "Codex Spark 5-hour",
window: RateWindow(
usedPercent: 40,
windowMinutes: 300,
resetsAt: now.addingTimeInterval(1800),
resetDescription: nil)),
NamedRateWindow(
id: "codex-other-limit",
title: "Other Codex limit",
window: RateWindow(
usedPercent: 30,
windowMinutes: 1440,
resetsAt: now.addingTimeInterval(3600),
resetDescription: nil)),
],
updatedAt: now),
provider: .codex)
let controller = StatusItemController(
store: store,
settings: settings,
account: UsageFetcher().loadAccountInfo(),
updater: DisabledUpdaterController(),
preferencesSelection: PreferencesSelection(),
statusBar: self.makeStatusBarForTesting())
defer { controller.releaseStatusItemsForTesting() }
#expect(controller.menuCardModel(for: .codex)?.metrics.contains {
$0.id == CodexAdditionalRateLimitMapper.sparkWindowID
} == true)
settings.codexSparkUsageVisible = false
let hiddenModel = try #require(controller.menuCardModel(for: .codex))
#expect(!hiddenModel.metrics.contains { $0.id == CodexAdditionalRateLimitMapper.sparkWindowID })
#expect(hiddenModel.metrics.contains { $0.id == "codex-other-limit" })
}
}