import CodexBarCoreimport Foundationimport Testing@testable import CodexBar struct CodexResetCreditsMenuCardTests { @Test func `reset credits render when optional usage is enabled`() throws { let metadata = try #require(ProviderDefaults.metadata[.codex]) let now = Date(timeIntervalSince1970: 1_781_726_400) let usage = UsageSnapshot( primary: RateWindow(usedPercent: 25, windowMinutes: 300, resetsAt: nil, resetDescription: nil), secondary: nil, codexResetCredits: CodexRateLimitResetCreditsSnapshot( credits: [ CodexRateLimitResetCredit( id: "reset-1", resetType: "codex_rate_limits", status: .available, grantedAt: now, expiresAt: now.addingTimeInterval(86400), redeemStartedAt: nil, redeemedAt: nil, title: "One free rate limit reset", description: nil), ], availableCount: 1, updatedAt: now), updatedAt: now, identity: ProviderIdentitySnapshot( providerID: .codex, accountEmail: "user@example.com", accountOrganization: nil, loginMethod: "pro")) let model = UsageMenuCardView.Model.make(Self.input( metadata: metadata, snapshot: usage, showOptionalUsage: true, now: now)) #expect(model.codexResetCreditsText == "1 manual reset available") #expect(model.codexResetCreditsDetailText == "Next expires in 1d") } @Test func `reset credits hide with optional usage disabled`() throws { let metadata = try #require(ProviderDefaults.metadata[.codex]) let now = Date(timeIntervalSince1970: 1_781_726_400) let usage = UsageSnapshot( primary: RateWindow(usedPercent: 25, windowMinutes: 300, resetsAt: nil, resetDescription: nil), secondary: nil, codexResetCredits: CodexRateLimitResetCreditsSnapshot( credits: [], availableCount: 2, updatedAt: now), updatedAt: now) let model = UsageMenuCardView.Model.make(Self.input( metadata: metadata, snapshot: usage, showOptionalUsage: false, now: now)) #expect(model.codexResetCreditsText == nil) #expect(model.codexResetCreditsDetailText == nil) } private static func input( metadata: ProviderMetadata, snapshot: UsageSnapshot, showOptionalUsage: Bool, now: Date) -> UsageMenuCardView.Model.Input { UsageMenuCardView.Model.Input( provider: .codex, 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: showOptionalUsage, hidePersonalInfo: false, now: now) }}
import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
struct CodexResetCreditsMenuCardTests {
@Test
func `reset credits render when optional usage is enabled`() throws {
let metadata = try #require(ProviderDefaults.metadata[.codex])
let now = Date(timeIntervalSince1970: 1_781_726_400)
let usage = UsageSnapshot(
primary: RateWindow(usedPercent: 25, windowMinutes: 300, resetsAt: nil, resetDescription: nil),
secondary: nil,
codexResetCredits: CodexRateLimitResetCreditsSnapshot(
credits: [
CodexRateLimitResetCredit(
id: "reset-1",
resetType: "codex_rate_limits",
status: .available,
grantedAt: now,
expiresAt: now.addingTimeInterval(86400),
redeemStartedAt: nil,
redeemedAt: nil,
title: "One free rate limit reset",
description: nil),
],
availableCount: 1,
updatedAt: now),
updatedAt: now,
identity: ProviderIdentitySnapshot(
providerID: .codex,
accountEmail: "user@example.com",
accountOrganization: nil,
loginMethod: "pro"))
let model = UsageMenuCardView.Model.make(Self.input(
metadata: metadata,
snapshot: usage,
showOptionalUsage: true,
now: now))
#expect(model.codexResetCreditsText == "1 manual reset available")
#expect(model.codexResetCreditsDetailText == "Next expires in 1d")
}
@Test
func `reset credits hide with optional usage disabled`() throws {
let metadata = try #require(ProviderDefaults.metadata[.codex])
let now = Date(timeIntervalSince1970: 1_781_726_400)
let usage = UsageSnapshot(
primary: RateWindow(usedPercent: 25, windowMinutes: 300, resetsAt: nil, resetDescription: nil),
secondary: nil,
codexResetCredits: CodexRateLimitResetCreditsSnapshot(
credits: [],
availableCount: 2,
updatedAt: now),
updatedAt: now)
let model = UsageMenuCardView.Model.make(Self.input(
metadata: metadata,
snapshot: usage,
showOptionalUsage: false,
now: now))
#expect(model.codexResetCreditsText == nil)
#expect(model.codexResetCreditsDetailText == nil)
}
private static func input(
metadata: ProviderMetadata,
snapshot: UsageSnapshot,
showOptionalUsage: Bool,
now: Date) -> UsageMenuCardView.Model.Input
{
UsageMenuCardView.Model.Input(
provider: .codex,
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: showOptionalUsage,
hidePersonalInfo: false,
now: now)
}
}