import CodexBarCoreimport Foundationimport Testing@testable import CodexBar @Suitestruct UsagePaceTextTests { @Test func weeklyPaceDetail_providesLeftRightLabels() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 50, windowMinutes: 10080, resetsAt: now.addingTimeInterval(4 * 24 * 3600), resetDescription: nil) let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now) #expect(detail?.leftLabel == "7% in deficit") #expect(detail?.rightLabel == "Runs out in 3d") } @Test func weeklyPaceDetail_reportsLastsUntilReset() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 10, windowMinutes: 10080, resetsAt: now.addingTimeInterval(4 * 24 * 3600), resetDescription: nil) let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now) #expect(detail?.leftLabel == "33% in reserve") #expect(detail?.rightLabel == "Lasts until reset") } @Test func weeklyPaceSummary_formatsSingleLineText() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 50, windowMinutes: 10080, resetsAt: now.addingTimeInterval(4 * 24 * 3600), resetDescription: nil) let summary = UsagePaceText.weeklySummary(provider: .codex, window: window, now: now) #expect(summary == "Pace: 7% in deficit · Runs out in 3d") } @Test func weeklyPaceDetail_hidesWhenResetIsMissing() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 10, windowMinutes: 10080, resetsAt: nil, resetDescription: nil) let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now) #expect(detail == nil) } @Test func weeklyPaceDetail_hidesWhenResetIsInPastOrTooFar() { let now = Date(timeIntervalSince1970: 0) let pastWindow = RateWindow( usedPercent: 10, windowMinutes: 10080, resetsAt: now.addingTimeInterval(-60), resetDescription: nil) let farFutureWindow = RateWindow( usedPercent: 10, windowMinutes: 10080, resetsAt: now.addingTimeInterval(9 * 24 * 3600), resetDescription: nil) #expect(UsagePaceText.weeklyDetail(provider: .codex, window: pastWindow, now: now) == nil) #expect(UsagePaceText.weeklyDetail(provider: .codex, window: farFutureWindow, now: now) == nil) } @Test func weeklyPaceDetail_hidesWhenNoElapsedButUsageExists() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 5, windowMinutes: 10080, resetsAt: now.addingTimeInterval(7 * 24 * 3600), resetDescription: nil) let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now) #expect(detail == nil) } @Test func weeklyPaceDetail_hidesWhenTooEarlyInWindow() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 40, windowMinutes: 10080, resetsAt: now.addingTimeInterval((7 * 24 * 3600) - (60 * 60)), resetDescription: nil) let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now) #expect(detail == nil) } @Test func weeklyPaceDetail_hidesWhenUsageIsDepleted() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 100, windowMinutes: 10080, resetsAt: now.addingTimeInterval(2 * 24 * 3600), resetDescription: nil) let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now) #expect(detail == nil) }}
import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
@Suite
struct UsagePaceTextTests {
@Test
func weeklyPaceDetail_providesLeftRightLabels() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 50,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(4 * 24 * 3600),
resetDescription: nil)
let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now)
#expect(detail?.leftLabel == "7% in deficit")
#expect(detail?.rightLabel == "Runs out in 3d")
}
@Test
func weeklyPaceDetail_reportsLastsUntilReset() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 10,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(4 * 24 * 3600),
resetDescription: nil)
let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now)
#expect(detail?.leftLabel == "33% in reserve")
#expect(detail?.rightLabel == "Lasts until reset")
}
@Test
func weeklyPaceSummary_formatsSingleLineText() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 50,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(4 * 24 * 3600),
resetDescription: nil)
let summary = UsagePaceText.weeklySummary(provider: .codex, window: window, now: now)
#expect(summary == "Pace: 7% in deficit · Runs out in 3d")
}
@Test
func weeklyPaceDetail_hidesWhenResetIsMissing() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 10,
windowMinutes: 10080,
resetsAt: nil,
resetDescription: nil)
let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now)
#expect(detail == nil)
}
@Test
func weeklyPaceDetail_hidesWhenResetIsInPastOrTooFar() {
let now = Date(timeIntervalSince1970: 0)
let pastWindow = RateWindow(
usedPercent: 10,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(-60),
resetDescription: nil)
let farFutureWindow = RateWindow(
usedPercent: 10,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(9 * 24 * 3600),
resetDescription: nil)
#expect(UsagePaceText.weeklyDetail(provider: .codex, window: pastWindow, now: now) == nil)
#expect(UsagePaceText.weeklyDetail(provider: .codex, window: farFutureWindow, now: now) == nil)
}
@Test
func weeklyPaceDetail_hidesWhenNoElapsedButUsageExists() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 5,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(7 * 24 * 3600),
resetDescription: nil)
let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now)
#expect(detail == nil)
}
@Test
func weeklyPaceDetail_hidesWhenTooEarlyInWindow() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 40,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval((7 * 24 * 3600) - (60 * 60)),
resetDescription: nil)
let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now)
#expect(detail == nil)
}
@Test
func weeklyPaceDetail_hidesWhenUsageIsDepleted() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 100,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(2 * 24 * 3600),
resetDescription: nil)
let detail = UsagePaceText.weeklyDetail(provider: .codex, window: window, now: now)
#expect(detail == nil)
}
}