Files
steipete--codexbar/Tests/CodexBarTests/ProviderQuotaFixtureContractTests.swift
2026-07-13 12:22:33 +08:00

80 lines
3.6 KiB
Swift

import Foundation
import Testing
@testable import CodexBar
@testable import CodexBarCore
struct ProviderQuotaFixtureContractTests {
@Test
func `MiniMax fixture preserves quota windows and plan`() throws {
let data = try Self.fixtureData(provider: "MiniMax", name: "token-plan-normal", fileExtension: "json")
let snapshot = try MiniMaxUsageParser.parseCodingPlanRemains(
data: data,
now: Date(timeIntervalSince1970: 1_780_282_340))
let usage = snapshot.toUsageSnapshot()
#expect(usage.identity(for: .minimax)?.loginMethod == "Token Plan Plus")
#expect(usage.primary?.usedPercent == 4)
#expect(usage.primary?.windowMinutes == 300)
#expect(usage.primary?.resetsAt == Date(timeIntervalSince1970: 1_780_297_200))
#expect(usage.secondary?.usedPercent == 1)
#expect(usage.secondary?.windowMinutes == 10080)
#expect(usage.secondary?.resetsAt == Date(timeIntervalSince1970: 1_780_848_000))
}
@Test
func `MiniMax fixture keeps windows when reset timestamps are absent`() throws {
let data = try Self.fixtureData(
provider: "MiniMax",
name: "token-plan-missing-reset",
fileExtension: "json")
let snapshot = try MiniMaxUsageParser.parseCodingPlanRemains(
data: data,
now: Date(timeIntervalSince1970: 1_780_282_340))
let usage = snapshot.toUsageSnapshot()
#expect(usage.identity(for: .minimax)?.loginMethod == "Token Plan Plus")
#expect(usage.primary?.usedPercent == 25)
#expect(usage.primary?.resetsAt == nil)
#expect(usage.secondary?.usedPercent == 40)
#expect(usage.secondary?.windowMinutes == 10080)
#expect(usage.secondary?.resetsAt == nil)
}
@Test
func `OpenAI fixture preserves quota windows and plan`() throws {
let data = try Self.fixtureData(provider: "OpenAI", name: "pro-normal", fileExtension: "html")
let body = try #require(String(data: data, encoding: .utf8))
let limits = OpenAIDashboardParser.parseRateLimits(bodyText: body)
#expect(OpenAIDashboardParser.parsePlanFromHTML(html: body) == "Pro 5x")
#expect(limits.primary?.usedPercent == 28)
#expect(limits.primary?.windowMinutes == 300)
#expect(limits.primary?.resetDescription?.localizedCaseInsensitiveContains("resets") == true)
#expect(limits.secondary?.usedPercent == 59)
#expect(limits.secondary?.windowMinutes == 10080)
#expect(limits.secondary?.resetDescription?.localizedCaseInsensitiveContains("resets") == true)
}
@Test
func `Claude fixture preserves quota windows and plan`() throws {
let data = try Self.fixtureData(provider: "Claude", name: "weekly-limit", fileExtension: "json")
let snapshot = try #require(ClaudeUsageFetcher.parse(json: data))
#expect(snapshot.loginMethod == "Claude Max")
#expect(snapshot.primary.usedPercent == 7)
#expect(snapshot.primary.windowMinutes == 300)
#expect(snapshot.primary.resetDescription?.contains("Europe/Vienna") == true)
#expect(snapshot.secondary?.usedPercent == 21)
#expect(snapshot.secondary?.windowMinutes == 10080)
#expect(snapshot.secondary?.resetDescription?.contains("Europe/Vienna") == true)
}
private static func fixtureData(provider: String, name: String, fileExtension: String) throws -> Data {
let url = try #require(Bundle.module.url(
forResource: name,
withExtension: fileExtension,
subdirectory: "Fixtures/Providers/\(provider)"))
return try Data(contentsOf: url)
}
}