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

77 lines
3.1 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
@MainActor
extension StatusMenuTests {
@Test
func `cost summary display style controls codex menu presentation`() throws {
self.disableMenuCardsForTesting()
for style in CostSummaryDisplayStyle.allCases {
let settings = self.makeSettings()
settings.statusChecksEnabled = false
settings.refreshFrequency = .manual
settings.mergeIcons = true
settings.selectedMenuProvider = .codex
settings.costUsageEnabled = true
settings.costSummaryDisplayStyle = style
let registry = ProviderRegistry.shared
for provider in UsageProvider.allCases {
guard let metadata = registry.metadata[provider] else { continue }
settings.setProviderEnabled(
provider: provider,
metadata: metadata,
enabled: provider == .codex)
}
let fetcher = UsageFetcher()
let store = UsageStore(
fetcher: fetcher,
browserDetection: BrowserDetection(cacheTTL: 0),
settings: settings)
store._setTokenSnapshotForTesting(
CostUsageTokenSnapshot(
sessionTokens: 85_000_000,
sessionCostUSD: 91.63,
last30DaysTokens: 1_100_000_000,
last30DaysCostUSD: 1001.27,
daily: [
CostUsageDailyReport.Entry(
date: "2026-06-23",
inputTokens: nil,
outputTokens: nil,
totalTokens: 85_000_000,
costUSD: 91.63,
modelsUsed: ["fictional-test-model"],
modelBreakdowns: nil),
],
updatedAt: Date()),
provider: .codex)
let controller = StatusItemController(
store: store,
settings: settings,
account: fetcher.loadAccountInfo(),
updater: DisabledUpdaterController(),
preferencesSelection: PreferencesSelection(),
statusBar: self.makeStatusBarForTesting())
defer { controller.releaseStatusItemsForTesting() }
let model = try #require(controller.menuCardModel(for: .codex))
let providerDetailModel = ProvidersPane(settings: settings, store: store)
._test_menuCardModel(for: .codex)
let menu = controller.makeMenu()
controller.menuWillOpen(menu)
let ids = menu.items.compactMap { $0.representedObject as? String }
#expect((model.inlineUsageDashboard != nil) == style.showsInlineSummary)
#expect((model.tokenUsage != nil) == style.showsCostSubmenu)
#expect(providerDetailModel.tokenUsage != nil)
#expect(ids.contains("menuCardCost") == style.showsCostSubmenu)
}
}
}