80 lines
3.6 KiB
Swift
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)
|
|
}
|
|
}
|