import CodexBarCoreimport Foundationimport Testing@testable import CodexBar @Suitestruct UsagePaceTextTests { @Test func weeklyPaceText_includesEtaWhenRunningOutBeforeReset() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 50, windowMinutes: 10080, resetsAt: now.addingTimeInterval(4 * 24 * 3600), resetDescription: nil) let text = UsagePaceText.weekly(provider: .codex, window: window, now: now) #expect(text == "Pace: Ahead (+7%) · Runs out in 3d") } @Test func weeklyPaceText_showsResetSafeWhenPaceIsSlow() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 10, windowMinutes: 10080, resetsAt: now.addingTimeInterval(4 * 24 * 3600), resetDescription: nil) let text = UsagePaceText.weekly(provider: .codex, window: window, now: now) #expect(text == "Pace: Behind (-33%) · Lasts to reset") } @Test func weeklyPaceText_hidesWhenResetIsMissing() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 10, windowMinutes: 10080, resetsAt: nil, resetDescription: nil) let text = UsagePaceText.weekly(provider: .codex, window: window, now: now) #expect(text == nil) } @Test func weeklyPaceText_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.weekly(provider: .codex, window: pastWindow, now: now) == nil) #expect(UsagePaceText.weekly(provider: .codex, window: farFutureWindow, now: now) == nil) } @Test func weeklyPaceText_hidesWhenNoElapsedButUsageExists() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 5, windowMinutes: 10080, resetsAt: now.addingTimeInterval(7 * 24 * 3600), resetDescription: nil) let text = UsagePaceText.weekly(provider: .codex, window: window, now: now) #expect(text == nil) } @Test func weeklyPaceText_hidesWhenTooEarlyInWindow() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 40, windowMinutes: 10080, resetsAt: now.addingTimeInterval((7 * 24 * 3600) - (60 * 60)), resetDescription: nil) let text = UsagePaceText.weekly(provider: .codex, window: window, now: now) #expect(text == nil) } @Test func weeklyPaceText_hidesWhenUsageIsDepleted() { let now = Date(timeIntervalSince1970: 0) let window = RateWindow( usedPercent: 100, windowMinutes: 10080, resetsAt: now.addingTimeInterval(2 * 24 * 3600), resetDescription: nil) let text = UsagePaceText.weekly(provider: .codex, window: window, now: now) #expect(text == nil) }}
import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
@Suite
struct UsagePaceTextTests {
@Test
func weeklyPaceText_includesEtaWhenRunningOutBeforeReset() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 50,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(4 * 24 * 3600),
resetDescription: nil)
let text = UsagePaceText.weekly(provider: .codex, window: window, now: now)
#expect(text == "Pace: Ahead (+7%) · Runs out in 3d")
}
@Test
func weeklyPaceText_showsResetSafeWhenPaceIsSlow() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 10,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(4 * 24 * 3600),
resetDescription: nil)
let text = UsagePaceText.weekly(provider: .codex, window: window, now: now)
#expect(text == "Pace: Behind (-33%) · Lasts to reset")
}
@Test
func weeklyPaceText_hidesWhenResetIsMissing() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 10,
windowMinutes: 10080,
resetsAt: nil,
resetDescription: nil)
let text = UsagePaceText.weekly(provider: .codex, window: window, now: now)
#expect(text == nil)
}
@Test
func weeklyPaceText_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.weekly(provider: .codex, window: pastWindow, now: now) == nil)
#expect(UsagePaceText.weekly(provider: .codex, window: farFutureWindow, now: now) == nil)
}
@Test
func weeklyPaceText_hidesWhenNoElapsedButUsageExists() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 5,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(7 * 24 * 3600),
resetDescription: nil)
let text = UsagePaceText.weekly(provider: .codex, window: window, now: now)
#expect(text == nil)
}
@Test
func weeklyPaceText_hidesWhenTooEarlyInWindow() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 40,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval((7 * 24 * 3600) - (60 * 60)),
resetDescription: nil)
let text = UsagePaceText.weekly(provider: .codex, window: window, now: now)
#expect(text == nil)
}
@Test
func weeklyPaceText_hidesWhenUsageIsDepleted() {
let now = Date(timeIntervalSince1970: 0)
let window = RateWindow(
usedPercent: 100,
windowMinutes: 10080,
resetsAt: now.addingTimeInterval(2 * 24 * 3600),
resetDescription: nil)
let text = UsagePaceText.weekly(provider: .codex, window: window, now: now)
#expect(text == nil)
}
}