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

122 lines
4.4 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
struct BedrockMenuCardTests {
@Test
func `bedrock cost section labels latest billing day`() throws {
let now = Date()
let metadata = try #require(ProviderDefaults.metadata[.bedrock])
let tokenSnapshot = CostUsageTokenSnapshot(
sessionTokens: nil,
sessionCostUSD: 12.34,
last30DaysTokens: nil,
last30DaysCostUSD: 56.78,
historyDays: 7,
daily: [
CostUsageDailyReport.Entry(
date: "2026-05-12",
inputTokens: nil,
outputTokens: nil,
totalTokens: nil,
costUSD: 12.34,
modelsUsed: ["Amazon Bedrock"],
modelBreakdowns: nil),
],
updatedAt: now)
let model = UsageMenuCardView.Model.make(.init(
provider: .bedrock,
metadata: metadata,
snapshot: nil,
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))
#expect(model.tokenUsage?.sessionLine == "Latest billing day (May 12): $12.34")
#expect(model.tokenUsage?.sessionLine.contains("Today") == false)
#expect(model.tokenUsage?.monthLine == "Last 7 days: $56.78")
#expect(model.tokenUsage?.hintLine == "AWS Cost Explorer billing can lag.")
}
@Test
func `bedrock cost section picks latest valid billing day`() throws {
let now = Date()
let metadata = try #require(ProviderDefaults.metadata[.bedrock])
let tokenSnapshot = CostUsageTokenSnapshot(
sessionTokens: nil,
sessionCostUSD: 23.45,
last30DaysTokens: nil,
last30DaysCostUSD: 56.78,
historyDays: 7,
daily: [
CostUsageDailyReport.Entry(
date: "not-a-day",
inputTokens: nil,
outputTokens: nil,
totalTokens: 10,
costUSD: 99,
modelsUsed: ["Amazon Bedrock"],
modelBreakdowns: nil),
CostUsageDailyReport.Entry(
date: "2026-06-31",
inputTokens: nil,
outputTokens: nil,
totalTokens: 40,
costUSD: 99,
modelsUsed: ["Amazon Bedrock"],
modelBreakdowns: nil),
CostUsageDailyReport.Entry(
date: "2026-05-12",
inputTokens: nil,
outputTokens: nil,
totalTokens: 20,
costUSD: 12.34,
modelsUsed: ["Amazon Bedrock"],
modelBreakdowns: nil),
CostUsageDailyReport.Entry(
date: "2026-05-13",
inputTokens: nil,
outputTokens: nil,
totalTokens: 30,
costUSD: 23.45,
modelsUsed: ["Amazon Bedrock"],
modelBreakdowns: nil),
],
updatedAt: now)
let model = UsageMenuCardView.Model.make(.init(
provider: .bedrock,
metadata: metadata,
snapshot: nil,
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))
#expect(model.tokenUsage?.sessionLine == "Latest billing day (May 13): $23.45")
}
}