61 lines
2.2 KiB
Swift
61 lines
2.2 KiB
Swift
import CodexBarCore
|
|
import Foundation
|
|
import Testing
|
|
|
|
/// Cross-platform tests for the OpenAI dashboard text parser.
|
|
///
|
|
/// The dashboard renders reset countdowns like "Resets Wednesday at 3pm". The parser
|
|
/// converts a textual weekday into the next occurrence of that weekday so it can be
|
|
/// formatted into a concrete `Date`. These tests pin down full-weekday-name coverage
|
|
/// because the underlying regex previously missed "Wednesday" and "Saturday" (their
|
|
/// abbreviations were not long enough to combine with the optional "day" suffix).
|
|
@Suite
|
|
struct OpenAIDashboardParserLinuxTests {
|
|
private static func fixedNow() -> Date {
|
|
var calendar = Calendar(identifier: .gregorian)
|
|
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
|
|
// 2026-05-21 is a Thursday in the Gregorian calendar; using a fixed anchor keeps
|
|
// the test deterministic regardless of when it executes.
|
|
return calendar.date(from: DateComponents(year: 2026, month: 5, day: 21))!
|
|
}
|
|
|
|
private static func body(forWeekday weekday: String) -> String {
|
|
"""
|
|
5h limit
|
|
50% remaining
|
|
Resets \(weekday)
|
|
"""
|
|
}
|
|
|
|
@Test
|
|
func parsesResetLineForEveryFullWeekdayName() {
|
|
let now = Self.fixedNow()
|
|
for weekday in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] {
|
|
let result = OpenAIDashboardParser.parseRateLimits(
|
|
bodyText: Self.body(forWeekday: weekday),
|
|
now: now)
|
|
#expect(
|
|
result.primary?.resetsAt != nil,
|
|
"Expected a parsed resetsAt for weekday \(weekday)")
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func parsesResetLineForLowercaseWednesday() {
|
|
let now = Self.fixedNow()
|
|
let result = OpenAIDashboardParser.parseRateLimits(
|
|
bodyText: Self.body(forWeekday: "wednesday"),
|
|
now: now)
|
|
#expect(result.primary?.resetsAt != nil)
|
|
}
|
|
|
|
@Test
|
|
func parsesResetLineForLowercaseSaturday() {
|
|
let now = Self.fixedNow()
|
|
let result = OpenAIDashboardParser.parseRateLimits(
|
|
bodyText: Self.body(forWeekday: "saturday"),
|
|
now: now)
|
|
#expect(result.primary?.resetsAt != nil)
|
|
}
|
|
}
|