import Foundationimport Testing@testable import CodexBarCore struct ClaudeWebUsageExtraWindowTests { @Test func `parses claude web API sonnet usage response`() throws { let json = """ { "five_hour": { "utilization": 9, "resets_at": "2025-12-23T16:00:00.000Z" }, "seven_day_sonnet": { "utilization": 6, "resets_at": "2025-12-30T23:00:00.000Z" } } """ let data = Data(json.utf8) let parsed = try ClaudeWebAPIFetcher._parseUsageResponseForTesting(data) #expect(parsed.opusPercentUsed == 6) } @Test func `ignores merged claude web API omelette usage window`() throws { let json = """ { "five_hour": { "utilization": 9, "resets_at": "2025-12-23T16:00:00.000Z" }, "seven_day_omelette": { "utilization": 26, "resets_at": "2025-12-30T23:00:00.000Z" }, "seven_day_cowork": { "utilization": 11, "resets_at": "2025-12-31T23:00:00.000Z" } } """ let data = Data(json.utf8) let parsed = try ClaudeWebAPIFetcher._parseUsageResponseForTesting(data) #expect(parsed.extraRateWindows.count == 1) #expect(parsed.extraRateWindows.contains { $0.id == "claude-design" } == false) #expect(parsed.extraRateWindows.first(where: { $0.id == "claude-routines" })?.window.usedPercent == 11) } @Test func `parses claude web API cowork null as zero routines window`() throws { let json = """ { "five_hour": { "utilization": 9, "resets_at": "2025-12-23T16:00:00.000Z" }, "seven_day_omelette": { "utilization": 26, "resets_at": "2025-12-30T23:00:00.000Z" }, "seven_day_cowork": null } """ let data = Data(json.utf8) let parsed = try ClaudeWebAPIFetcher._parseUsageResponseForTesting(data) #expect(parsed.extraRateWindows.first(where: { $0.id == "claude-routines" })?.window.usedPercent == 0) #expect(parsed.extraRateWindows.contains { $0.id == "claude-design" } == false) }}
import Foundation
import Testing
@testable import CodexBarCore
struct ClaudeWebUsageExtraWindowTests {
@Test
func `parses claude web API sonnet usage response`() throws {
let json = """
{
"five_hour": { "utilization": 9, "resets_at": "2025-12-23T16:00:00.000Z" },
"seven_day_sonnet": { "utilization": 6, "resets_at": "2025-12-30T23:00:00.000Z" }
}
"""
let data = Data(json.utf8)
let parsed = try ClaudeWebAPIFetcher._parseUsageResponseForTesting(data)
#expect(parsed.opusPercentUsed == 6)
}
@Test
func `ignores merged claude web API omelette usage window`() throws {
let json = """
{
"five_hour": { "utilization": 9, "resets_at": "2025-12-23T16:00:00.000Z" },
"seven_day_omelette": { "utilization": 26, "resets_at": "2025-12-30T23:00:00.000Z" },
"seven_day_cowork": { "utilization": 11, "resets_at": "2025-12-31T23:00:00.000Z" }
}
"""
let data = Data(json.utf8)
let parsed = try ClaudeWebAPIFetcher._parseUsageResponseForTesting(data)
#expect(parsed.extraRateWindows.count == 1)
#expect(parsed.extraRateWindows.contains { $0.id == "claude-design" } == false)
#expect(parsed.extraRateWindows.first(where: { $0.id == "claude-routines" })?.window.usedPercent == 11)
}
@Test
func `parses claude web API cowork null as zero routines window`() throws {
let json = """
{
"five_hour": { "utilization": 9, "resets_at": "2025-12-23T16:00:00.000Z" },
"seven_day_omelette": { "utilization": 26, "resets_at": "2025-12-30T23:00:00.000Z" },
"seven_day_cowork": null
}
"""
let data = Data(json.utf8)
let parsed = try ClaudeWebAPIFetcher._parseUsageResponseForTesting(data)
#expect(parsed.extraRateWindows.first(where: { $0.id == "claude-routines" })?.window.usedPercent == 0)
#expect(parsed.extraRateWindows.contains { $0.id == "claude-design" } == false)
}
}