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

72 lines
3.0 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
struct ClaudeAdminAPIInlineDashboardModelTests {
@Test
func `claude admin api usage gets inline dashboard`() throws {
let now = try Self.localNoon(year: 2023, month: 11, day: 17)
let bucketDay = try Self.localNoon(year: 2023, month: 11, day: 14)
let metadata = try #require(ProviderDefaults.metadata[.claude])
let usage = ClaudeAdminAPIUsageSnapshot(
daily: [
ClaudeAdminAPIUsageSnapshot.DailyBucket(
day: "2023-11-14",
startTime: bucketDay,
endTime: bucketDay.addingTimeInterval(86400),
costUSD: 1.25,
inputTokens: 1000,
cacheCreationInputTokens: 400,
cacheReadInputTokens: 300,
outputTokens: 250,
totalTokens: 1950,
costItems: [
ClaudeAdminAPIUsageSnapshot.CostBreakdown(name: "Claude Sonnet Usage", costUSD: 1.25),
],
models: [
ClaudeAdminAPIUsageSnapshot.ModelBreakdown(
name: "claude-sonnet-4-20250514",
inputTokens: 1000,
cacheCreationInputTokens: 400,
cacheReadInputTokens: 300,
outputTokens: 250,
totalTokens: 1950),
]),
],
updatedAt: now)
let model = UsageMenuCardView.Model.make(.init(
provider: .claude,
metadata: metadata,
snapshot: usage.toUsageSnapshot(),
credits: nil,
creditsError: nil,
dashboard: nil,
dashboardError: nil,
tokenSnapshot: nil,
tokenError: nil,
account: AccountInfo(email: nil, plan: nil),
isRefreshing: false,
lastError: nil,
usageBarsShowUsed: false,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: false,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
#expect(model.metrics.isEmpty)
#expect(model.inlineUsageDashboard?.kpis.first?.value == "$0.00")
#expect(model.inlineUsageDashboard?.points.first?.accessibilityValue == "2023-11-14: $1.25")
#expect(model.inlineUsageDashboard?.detailLines
.contains { $0.hasPrefix("30d:") && $0.contains("tokens") } == true)
#expect(model.inlineUsageDashboard?.detailLines.contains("Top model: claude-sonnet-4-20250514") == true)
#expect(model.planText == "Admin API")
}
private static func localNoon(year: Int, month: Int, day: Int) throws -> Date {
try #require(Calendar.current.date(from: DateComponents(year: year, month: month, day: day, hour: 12)))
}
}