122 lines
4.4 KiB
Swift
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")
|
|
}
|
|
}
|