Files
2026-07-13 12:22:33 +08:00

97 lines
3.3 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
struct MenuCardCostHintTests {
@Test
func `claude cost hint explains cache tokens and status line drift`() throws {
let now = Date()
let metadata = try #require(ProviderDefaults.metadata[.claude])
let snapshot = CostUsageTokenSnapshot(
sessionTokens: 123,
sessionCostUSD: 1.23,
last30DaysTokens: 456,
last30DaysCostUSD: 78.9,
daily: [
CostUsageDailyReport.Entry(
date: "2026-05-14",
inputTokens: 1,
outputTokens: 2,
cacheReadTokens: 300,
cacheCreationTokens: 400,
totalTokens: 703,
costUSD: 1.23,
modelsUsed: ["claude-sonnet-4-6"],
modelBreakdowns: nil),
],
updatedAt: now)
let model = UsageMenuCardView.Model.make(.init(
provider: .claude,
metadata: metadata,
snapshot: nil,
credits: nil,
creditsError: nil,
dashboard: nil,
dashboardError: nil,
tokenSnapshot: snapshot,
tokenError: nil,
account: AccountInfo(email: nil, plan: nil),
isRefreshing: false,
lastError: nil,
usageBarsShowUsed: false,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: true,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
#expect(model.tokenUsage?.hintLine?.contains("cache read/write tokens") == true)
#expect(model.tokenUsage?.hintLine?.contains("Claude Code /status") == true)
}
@Test
func `one day history label stays today`() throws {
let now = Date()
let metadata = try #require(ProviderDefaults.metadata[.claude])
let snapshot = CostUsageTokenSnapshot(
sessionTokens: 120,
sessionCostUSD: 1.2,
last30DaysTokens: 120,
last30DaysCostUSD: 1.2,
historyDays: 1,
daily: [
.init(
date: "2026-05-14",
inputTokens: 100,
outputTokens: 20,
totalTokens: 120,
costUSD: 1.2,
modelsUsed: ["claude-sonnet-4-6"],
modelBreakdowns: nil),
],
updatedAt: now)
let model = UsageMenuCardView.Model.make(.init(
provider: .claude,
metadata: metadata,
snapshot: nil,
credits: nil,
creditsError: nil,
dashboard: nil,
dashboardError: nil,
tokenSnapshot: snapshot,
tokenError: nil,
account: AccountInfo(email: nil, plan: nil),
isRefreshing: false,
lastError: nil,
usageBarsShowUsed: false,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: true,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
#expect(model.tokenUsage?.monthLine.hasPrefix("Today: ") == true)
}
}