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

158 lines
5.2 KiB
Swift

import CodexBarCore
import Foundation
import SwiftUI
import Testing
@testable import CodexBar
struct MenuCardProviderRegressionTests {
@Test
func `menu card keeps positive sub percent usage visible`() {
let metric = UsageMenuCardView.Model.Metric(
id: "sub-percent",
title: "Monthly",
percent: 0.1,
percentStyle: .used,
resetText: nil,
detailText: nil,
detailLeftText: nil,
detailRightText: nil,
pacePercent: nil,
paceOnTop: false)
#expect(metric.percentLabel == "<1% used")
}
@Test
func `elevenlabs progress color stays visible in light menus`() {
#expect(UsageMenuCardView.Model.progressColor(for: .elevenlabs) == Color(nsColor: .labelColor))
}
@Test
func `open router model shows daily and weekly key spend`() throws {
let now = Date()
let metadata = try #require(ProviderDefaults.metadata[.openrouter])
let snapshot = OpenRouterUsageSnapshot(
totalCredits: 50,
totalUsage: 45.3895596325,
balance: 4.6104403675,
usedPercent: 90.779119265,
keyLimit: 20,
keyUsage: 0.5,
keyUsageDaily: 0.12,
keyUsageWeekly: 0.74,
rateLimit: nil,
updatedAt: now).toUsageSnapshot()
let model = UsageMenuCardView.Model.make(.init(
provider: .openrouter,
metadata: metadata,
snapshot: snapshot,
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.usageNotes == ["Today: $0.12 · This week: $0.74"])
}
@Test
func `wayfinder model shows gateway routing savings and latency`() throws {
let now = Date()
let metadata = try #require(ProviderDefaults.metadata[.wayfinder])
let usage = WayfinderUsageSnapshot(
gatewayStatus: "ok",
offline: false,
dryRun: true,
missingKeys: [],
modelCount: 2,
requests: 14,
tokens: 1028,
realized: 0.003558,
baseline: 0.009252,
saved: 0.005694,
savedPct: 61.5,
priced: true,
routes: [
.init(name: "local", requests: 10, saved: 0.005694, tokens: 662),
.init(name: "cloud", requests: 4, saved: 0, tokens: 366),
],
avgDecisionMs: 0.0804,
updatedAt: now)
let model = UsageMenuCardView.Model.make(.init(
provider: .wayfinder,
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.usageNotes == [
"Gateway: ok · 2 models · dry run",
"Routed: local: 10 · cloud: 4",
"Saved: <$0.01 · 61.5% vs highest-cost route",
"Avg decision: 0.1 ms",
])
}
@Test
func `copilot over quota usage keeps used percentage detail`() throws {
let now = Date()
let metadata = try #require(ProviderDefaults.metadata[.copilot])
let snapshot = UsageSnapshot(
primary: RateWindow(usedPercent: 115, windowMinutes: nil, resetsAt: nil, resetDescription: "115% used"),
secondary: nil,
tertiary: nil,
updatedAt: now,
identity: nil)
let model = UsageMenuCardView.Model.make(.init(
provider: .copilot,
metadata: metadata,
snapshot: snapshot,
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))
let metric = try #require(model.metrics.first)
#expect(metric.percent == 0)
#expect(metric.percentLabel == "0% left")
#expect(metric.detailLeftText == "115% used")
}
}