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

95 lines
3.3 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
struct MenuCardSubtitleTests {
@Test
func `subtitle uses injected current time`() throws {
let updatedAt = Date(timeIntervalSinceReferenceDate: 0)
let now = updatedAt.addingTimeInterval(5 * 3600)
let snapshot = UsageSnapshot(
primary: RateWindow(
usedPercent: 22,
windowMinutes: 300,
resetsAt: now.addingTimeInterval(3000),
resetDescription: nil),
secondary: nil,
tertiary: nil,
updatedAt: updatedAt,
identity: ProviderIdentitySnapshot(
providerID: .codex,
accountEmail: "codex@example.com",
accountOrganization: nil,
loginMethod: "Plus Plan"))
let metadata = try #require(ProviderDefaults.metadata[.codex])
let model = UsageMenuCardView.Model.make(.init(
provider: .codex,
metadata: metadata,
snapshot: snapshot,
credits: nil,
creditsError: nil,
dashboard: nil,
dashboardError: nil,
tokenSnapshot: nil,
tokenError: nil,
account: AccountInfo(email: "codex@example.com", plan: "Plus Plan"),
isRefreshing: false,
lastError: nil,
usageBarsShowUsed: false,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: false,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
#expect(model.subtitleText == UsageFormatter.updatedString(from: updatedAt, now: now))
}
@Test
func `subtitle shows refreshing while cached snapshot remains visible`() throws {
let updatedAt = Date(timeIntervalSinceReferenceDate: 0)
let now = updatedAt.addingTimeInterval(5 * 3600)
let snapshot = UsageSnapshot(
primary: RateWindow(
usedPercent: 22,
windowMinutes: 300,
resetsAt: now.addingTimeInterval(3000),
resetDescription: nil),
secondary: nil,
tertiary: nil,
updatedAt: updatedAt,
identity: ProviderIdentitySnapshot(
providerID: .codex,
accountEmail: "codex@example.com",
accountOrganization: nil,
loginMethod: "Plus Plan"))
let metadata = try #require(ProviderDefaults.metadata[.codex])
let model = UsageMenuCardView.Model.make(.init(
provider: .codex,
metadata: metadata,
snapshot: snapshot,
credits: nil,
creditsError: nil,
dashboard: nil,
dashboardError: nil,
tokenSnapshot: nil,
tokenError: nil,
account: AccountInfo(email: "codex@example.com", plan: "Plus Plan"),
isRefreshing: true,
lastError: nil,
usageBarsShowUsed: false,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: false,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
#expect(model.subtitleText == "Refreshing…")
#expect(model.subtitleStyle == .loading)
#expect(!model.metrics.isEmpty)
}
}