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

66 lines
2.3 KiB
Swift

import Foundation
import Testing
@testable import CodexBarCore
struct ClaudeScopedWeeklyLimitMapperTests {
@Test
func `model id provides a stable safe identifier and duplicate limits collapse`() throws {
let reset = Date(timeIntervalSince1970: 1_783_507_200)
let limits = [
Self.limit(modelID: "claude/fable.5:promo", modelName: "Fable", resetsAt: reset),
Self.limit(modelID: "claude/fable.5:promo", modelName: "Fable renamed", resetsAt: reset),
]
let windows = ClaudeScopedWeeklyLimitMapper.extraRateWindows(
from: limits,
resetDescription: { _ in "Jul 8" })
let window = try #require(windows.first)
#expect(windows.count == 1)
#expect(window.id == "claude-weekly-scoped-claude-fable-5-promo")
#expect(window.title == "Fable only")
#expect(window.window.resetsAt == reset)
#expect(window.window.resetDescription == "Jul 8")
}
@Test
func `display name supplies the identifier when the API omits a model id`() throws {
let windows = ClaudeScopedWeeklyLimitMapper.extraRateWindows(from: [
Self.limit(modelID: " ", modelName: " Team / Research "),
])
let window = try #require(windows.first)
#expect(window.id == "claude-weekly-scoped-team-research")
#expect(window.title == "Team / Research only")
}
@Test
func `unrelated malformed and unnamed limits are ignored`() {
let limits = [
Self.limit(kind: "session", modelName: "Fable"),
Self.limit(group: "monthly", modelName: "Fable"),
Self.limit(percent: .nan, modelName: "Fable"),
Self.limit(modelName: " "),
]
#expect(ClaudeScopedWeeklyLimitMapper.extraRateWindows(from: limits).isEmpty)
}
private static func limit(
kind: String = "weekly_scoped",
group: String = "weekly",
percent: Double = 5,
modelID: String? = nil,
modelName: String?,
resetsAt: Date? = nil) -> ClaudeScopedWeeklyLimitMapper.Limit
{
ClaudeScopedWeeklyLimitMapper.Limit(
kind: kind,
group: group,
percent: percent,
resetsAt: resetsAt,
modelID: modelID,
modelName: modelName)
}
}