89 lines
3.6 KiB
Swift
89 lines
3.6 KiB
Swift
import CodexBarCore
|
|
import Foundation
|
|
import SwiftUI
|
|
import Testing
|
|
@testable import CodexBar
|
|
|
|
struct InlineUsageDashboardBarColorTests {
|
|
/// The inline usage bars must be tinted with each provider's branding color (the same color
|
|
/// used by the switcher tab and the detailed cost-history chart) rather than a fixed palette.
|
|
@Test
|
|
func `bar color matches branding for every provider`() {
|
|
for provider in UsageProvider.allCases {
|
|
let branding = ProviderDescriptorRegistry.descriptor(for: provider).branding.color
|
|
let expected = Color(red: branding.red, green: branding.green, blue: branding.blue)
|
|
#expect(
|
|
UsageMenuCardView.Model.inlineDashboardBarColor(for: provider) == expected,
|
|
"inline bar color did not match branding for \(provider.rawValue)")
|
|
}
|
|
}
|
|
|
|
/// The resolved dashboard model must actually carry the provider's branding color, and two
|
|
/// providers with different branding must end up with different bar colors.
|
|
@Test
|
|
func `resolved dashboard carries provider branding color`() throws {
|
|
let now = Date(timeIntervalSince1970: 1_700_179_200)
|
|
let daily = [
|
|
CostUsageDailyReport.Entry(
|
|
date: "2023-11-14",
|
|
inputTokens: 100,
|
|
outputTokens: 50,
|
|
totalTokens: 150,
|
|
costUSD: 0.12,
|
|
modelsUsed: ["gpt-5"],
|
|
modelBreakdowns: nil),
|
|
CostUsageDailyReport.Entry(
|
|
date: "2023-11-15",
|
|
inputTokens: 200,
|
|
outputTokens: 75,
|
|
totalTokens: 275,
|
|
costUSD: 0.25,
|
|
modelsUsed: ["gpt-5"],
|
|
modelBreakdowns: nil),
|
|
]
|
|
|
|
func makeModel(provider: UsageProvider) throws -> UsageMenuCardView.Model {
|
|
let metadata = try #require(ProviderDefaults.metadata[provider])
|
|
let tokenSnapshot = CostUsageTokenSnapshot(
|
|
sessionTokens: 275,
|
|
sessionCostUSD: 0.25,
|
|
last30DaysTokens: 425,
|
|
last30DaysCostUSD: 0.37,
|
|
historyDays: 30,
|
|
daily: daily,
|
|
updatedAt: now)
|
|
return UsageMenuCardView.Model.make(.init(
|
|
provider: provider,
|
|
metadata: metadata,
|
|
snapshot: UsageSnapshot(
|
|
primary: RateWindow(usedPercent: 10, windowMinutes: nil, resetsAt: nil, resetDescription: nil),
|
|
secondary: nil,
|
|
updatedAt: now),
|
|
credits: nil,
|
|
creditsError: nil,
|
|
dashboard: nil,
|
|
dashboardError: nil,
|
|
tokenSnapshot: tokenSnapshot,
|
|
tokenError: nil,
|
|
account: AccountInfo(email: nil, plan: nil),
|
|
isRefreshing: false,
|
|
lastError: nil,
|
|
usageBarsShowUsed: false,
|
|
resetTimeDisplayStyle: .countdown,
|
|
tokenCostUsageEnabled: true,
|
|
showOptionalCreditsAndExtraUsage: true,
|
|
hidePersonalInfo: false,
|
|
now: now))
|
|
}
|
|
|
|
let codex = try makeModel(provider: .codex)
|
|
let claude = try makeModel(provider: .claude)
|
|
|
|
#expect(codex.inlineUsageDashboard?.barColor
|
|
== UsageMenuCardView.Model.inlineDashboardBarColor(for: .codex))
|
|
#expect(claude.inlineUsageDashboard?.barColor
|
|
== UsageMenuCardView.Model.inlineDashboardBarColor(for: .claude))
|
|
#expect(codex.inlineUsageDashboard?.barColor != claude.inlineUsageDashboard?.barColor)
|
|
}
|
|
}
|