chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
import CodexBarCore
|
||||
import Foundation
|
||||
import Testing
|
||||
@testable import CodexBar
|
||||
|
||||
extension StatusMenuTests {
|
||||
@Test
|
||||
func `open AI API primary dashboard ignores optional cost summary toggle`() throws {
|
||||
self.disableMenuCardsForTesting()
|
||||
let settings = self.makeSettings()
|
||||
settings.statusChecksEnabled = false
|
||||
settings.refreshFrequency = .manual
|
||||
settings.selectedMenuProvider = .openai
|
||||
settings.costUsageEnabled = false
|
||||
|
||||
let metadata = try #require(ProviderRegistry.shared.metadata[.openai])
|
||||
settings.setProviderEnabled(provider: .openai, metadata: metadata, enabled: true)
|
||||
|
||||
let fetcher = UsageFetcher()
|
||||
let store = UsageStore(
|
||||
fetcher: fetcher,
|
||||
browserDetection: BrowserDetection(cacheTTL: 0),
|
||||
settings: settings)
|
||||
let now = Date(timeIntervalSince1970: 1_700_000_000)
|
||||
let usage = OpenAIAPIUsageSnapshot(
|
||||
daily: [
|
||||
OpenAIAPIUsageSnapshot.DailyBucket(
|
||||
day: "2023-11-14",
|
||||
startTime: now,
|
||||
endTime: now.addingTimeInterval(86400),
|
||||
costUSD: 9,
|
||||
requests: 12,
|
||||
inputTokens: 100,
|
||||
cachedInputTokens: 0,
|
||||
outputTokens: 50,
|
||||
totalTokens: 150,
|
||||
lineItems: [],
|
||||
models: []),
|
||||
],
|
||||
updatedAt: now)
|
||||
store._setSnapshotForTesting(usage.toUsageSnapshot(), provider: .openai)
|
||||
|
||||
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: .openai))
|
||||
#expect(model.inlineUsageDashboard != nil)
|
||||
#expect(model.tokenUsage == nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
func `open AI API usage submenu ignores optional local cost preferences`() throws {
|
||||
self.disableMenuCardsForTesting()
|
||||
|
||||
for style in CostSummaryDisplayStyle.allCases {
|
||||
let settings = self.makeSettings()
|
||||
settings.statusChecksEnabled = false
|
||||
settings.refreshFrequency = .manual
|
||||
settings.selectedMenuProvider = .openai
|
||||
settings.costUsageEnabled = false
|
||||
settings.costSummaryDisplayStyle = style
|
||||
|
||||
let registry = ProviderRegistry.shared
|
||||
let metadata = try #require(registry.metadata[.openai])
|
||||
settings.setProviderEnabled(provider: .openai, metadata: metadata, enabled: true)
|
||||
|
||||
let fetcher = UsageFetcher()
|
||||
let store = UsageStore(
|
||||
fetcher: fetcher,
|
||||
browserDetection: BrowserDetection(cacheTTL: 0),
|
||||
settings: settings)
|
||||
let now = Date(timeIntervalSince1970: 1_700_000_000)
|
||||
let usage = OpenAIAPIUsageSnapshot(
|
||||
daily: [
|
||||
OpenAIAPIUsageSnapshot.DailyBucket(
|
||||
day: "2023-11-14",
|
||||
startTime: now,
|
||||
endTime: now.addingTimeInterval(86400),
|
||||
costUSD: 9,
|
||||
requests: 12,
|
||||
inputTokens: 100,
|
||||
cachedInputTokens: 0,
|
||||
outputTokens: 50,
|
||||
totalTokens: 150,
|
||||
lineItems: [],
|
||||
models: []),
|
||||
],
|
||||
updatedAt: now)
|
||||
store._setSnapshotForTesting(usage.toUsageSnapshot(), provider: .openai)
|
||||
|
||||
let controller = StatusItemController(
|
||||
store: store,
|
||||
settings: settings,
|
||||
account: fetcher.loadAccountInfo(),
|
||||
updater: DisabledUpdaterController(),
|
||||
preferencesSelection: PreferencesSelection(),
|
||||
statusBar: self.makeStatusBarForTesting())
|
||||
defer { controller.releaseStatusItemsForTesting() }
|
||||
|
||||
#expect(controller.makeOpenAIAPIUsageSubmenu(provider: .openai) != nil)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
func `open AI API usage submenu ignores stale token snapshot without current admin usage`() throws {
|
||||
self.disableMenuCardsForTesting()
|
||||
let settings = self.makeSettings()
|
||||
settings.statusChecksEnabled = false
|
||||
settings.refreshFrequency = .manual
|
||||
settings.selectedMenuProvider = .openai
|
||||
|
||||
let registry = ProviderRegistry.shared
|
||||
let metadata = try #require(registry.metadata[.openai])
|
||||
settings.setProviderEnabled(provider: .openai, metadata: metadata, enabled: true)
|
||||
|
||||
let fetcher = UsageFetcher()
|
||||
let store = UsageStore(fetcher: fetcher, browserDetection: BrowserDetection(cacheTTL: 0), settings: settings)
|
||||
let now = Date(timeIntervalSince1970: 1_700_000_000)
|
||||
store._setSnapshotForTesting(
|
||||
UsageSnapshot(primary: nil, secondary: nil, updatedAt: now),
|
||||
provider: .openai)
|
||||
store._setTokenSnapshotForTesting(CostUsageTokenSnapshot(
|
||||
sessionTokens: 123,
|
||||
sessionCostUSD: 0.12,
|
||||
last30DaysTokens: 123,
|
||||
last30DaysCostUSD: 1.23,
|
||||
daily: [
|
||||
CostUsageDailyReport.Entry(
|
||||
date: "2025-12-23",
|
||||
inputTokens: nil,
|
||||
outputTokens: nil,
|
||||
totalTokens: 123,
|
||||
costUSD: 1.23,
|
||||
modelsUsed: nil,
|
||||
modelBreakdowns: nil),
|
||||
],
|
||||
updatedAt: now), provider: .openai)
|
||||
|
||||
let controller = StatusItemController(
|
||||
store: store,
|
||||
settings: settings,
|
||||
account: fetcher.loadAccountInfo(),
|
||||
updater: DisabledUpdaterController(),
|
||||
preferencesSelection: PreferencesSelection(),
|
||||
statusBar: self.makeStatusBarForTesting())
|
||||
defer { controller.releaseStatusItemsForTesting() }
|
||||
|
||||
#expect(controller.makeOpenAIAPIUsageSubmenu(provider: .openai) == nil)
|
||||
}
|
||||
|
||||
@Test
|
||||
func `mistral native billing submenus ignore optional local cost preferences`() throws {
|
||||
StatusItemController.menuCardRenderingEnabled = true
|
||||
StatusItemController.setMenuRefreshEnabledForTesting(false)
|
||||
defer { self.disableMenuCardsForTesting() }
|
||||
let settings = self.makeSettings()
|
||||
settings.statusChecksEnabled = false
|
||||
settings.refreshFrequency = .manual
|
||||
settings.selectedMenuProvider = .mistral
|
||||
settings.costUsageEnabled = false
|
||||
settings.costSummaryDisplayStyle = .inlineSummary
|
||||
|
||||
let metadata = try #require(ProviderRegistry.shared.metadata[.mistral])
|
||||
settings.setProviderEnabled(provider: .mistral, metadata: metadata, enabled: true)
|
||||
|
||||
let fetcher = UsageFetcher()
|
||||
let store = UsageStore(
|
||||
fetcher: fetcher,
|
||||
browserDetection: BrowserDetection(cacheTTL: 0),
|
||||
settings: settings)
|
||||
let now = Date(timeIntervalSince1970: 1_700_179_200)
|
||||
let usage = MistralUsageSnapshot(
|
||||
totalCost: 1.5,
|
||||
currency: "EUR",
|
||||
currencySymbol: "€",
|
||||
totalInputTokens: 100,
|
||||
totalOutputTokens: 50,
|
||||
totalCachedTokens: 0,
|
||||
modelCount: 1,
|
||||
daily: [
|
||||
MistralDailyUsageBucket(
|
||||
day: "2023-11-14",
|
||||
cost: 1.5,
|
||||
inputTokens: 100,
|
||||
cachedTokens: 0,
|
||||
outputTokens: 50,
|
||||
models: []),
|
||||
],
|
||||
startDate: nil,
|
||||
endDate: nil,
|
||||
updatedAt: now)
|
||||
store._setSnapshotForTesting(usage.toUsageSnapshot(), provider: .mistral)
|
||||
|
||||
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: .mistral))
|
||||
#expect(model.inlineUsageDashboard != nil)
|
||||
#expect(model.tokenUsage == nil)
|
||||
#expect(controller.makeOverviewRowSubmenu(provider: .mistral, model: model, width: 320) != nil)
|
||||
|
||||
let menu = controller.makeMenu(for: .mistral)
|
||||
controller.menuWillOpen(menu)
|
||||
let usageItem = menu.items.first { ($0.representedObject as? String) == "menuCardUsage" }
|
||||
#expect(usageItem?.submenu != nil)
|
||||
|
||||
settings.costUsageEnabled = true
|
||||
settings.costSummaryDisplayStyle = .both
|
||||
let costsEnabledModel = try #require(controller.menuCardModel(for: .mistral))
|
||||
#expect(costsEnabledModel.inlineUsageDashboard != nil)
|
||||
#expect(costsEnabledModel.tokenUsage == nil)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user