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

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)
}
}