55 lines
1.9 KiB
Swift
55 lines
1.9 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import CodexBarCore
|
|
@testable import CodexBarWidget
|
|
|
|
struct CodexLegacyWidgetSnapshotTests {
|
|
@Test
|
|
func `codex widget caps legacy decoded rows without window metadata`() throws {
|
|
let json = """
|
|
{
|
|
"entries": [
|
|
{
|
|
"provider": "codex",
|
|
"updatedAt": "2027-01-15T08:00:00Z",
|
|
"primary": {
|
|
"usedPercent": 1,
|
|
"windowMinutes": 300,
|
|
"resetsAt": "2027-01-15T09:00:00Z",
|
|
"resetDescription": null
|
|
},
|
|
"secondary": {
|
|
"usedPercent": 100,
|
|
"windowMinutes": 10080,
|
|
"resetsAt": "2027-01-15T10:00:00Z",
|
|
"resetDescription": null
|
|
},
|
|
"tertiary": null,
|
|
"usageRows": [
|
|
{ "id": "session", "title": "Session", "percentLeft": 99 },
|
|
{ "id": "weekly", "title": "Weekly", "percentLeft": 0 }
|
|
],
|
|
"creditsRemaining": null,
|
|
"codeReviewRemainingPercent": null,
|
|
"tokenUsage": null,
|
|
"dailyUsage": []
|
|
}
|
|
],
|
|
"enabledProviders": ["codex"],
|
|
"generatedAt": "2027-01-15T08:00:00Z"
|
|
}
|
|
"""
|
|
let decoder = JSONDecoder()
|
|
decoder.dateDecodingStrategy = .iso8601
|
|
let snapshot = try decoder.decode(WidgetSnapshot.self, from: Data(json.utf8))
|
|
let entry = try #require(snapshot.entries.first)
|
|
let now = try #require(ISO8601DateFormatter().date(from: "2027-01-15T08:30:00Z"))
|
|
|
|
let rows = WidgetUsageRow.rows(for: entry, now: now)
|
|
|
|
#expect(entry.usageRows?.allSatisfy { $0.window == nil } == true)
|
|
#expect(rows.map(\.id) == ["session", "weekly"])
|
|
#expect(rows.map(\.percentLeft) == [0, 0])
|
|
}
|
|
}
|