Files
2026-07-13 12:22:33 +08:00

176 lines
6.7 KiB
Swift

import CodexBarCore
import Foundation
import XCTest
final class ResetTimeBackfillTests: XCTestCase {
func test_backfillsMissingResetMetadataFromCachedWindow() {
let now = Date(timeIntervalSince1970: 1_800_000_000)
let reset = now.addingTimeInterval(3600)
let cached = RateWindow(
usedPercent: 50,
windowMinutes: 300,
resetsAt: reset,
resetDescription: "Resets in 1h",
nextRegenPercent: 9)
let fresh = RateWindow(
usedPercent: 62,
windowMinutes: nil,
resetsAt: nil,
resetDescription: nil,
nextRegenPercent: 4)
let result = fresh.backfillingResetTime(from: cached, now: now)
XCTAssertEqual(result.usedPercent, 62)
XCTAssertEqual(result.windowMinutes, 300)
XCTAssertEqual(result.resetsAt, reset)
XCTAssertEqual(result.resetDescription, "Resets in 1h")
XCTAssertEqual(result.nextRegenPercent, 4)
}
func test_backfillsZeroWindowDurationFromCachedWindow() {
let now = Date(timeIntervalSince1970: 1_800_000_000)
let reset = now.addingTimeInterval(3600)
let cached = RateWindow(
usedPercent: 50,
windowMinutes: 300,
resetsAt: reset,
resetDescription: nil)
let fresh = RateWindow(usedPercent: 62, windowMinutes: 0, resetsAt: nil, resetDescription: nil)
let result = fresh.backfillingResetTime(from: cached, now: now)
XCTAssertEqual(result.windowMinutes, 300)
XCTAssertEqual(result.resetsAt, reset)
}
func test_skipsExpiredCachedReset() {
let now = Date(timeIntervalSince1970: 1_800_000_000)
let cached = RateWindow(
usedPercent: 50,
windowMinutes: 300,
resetsAt: now.addingTimeInterval(-60),
resetDescription: "Expired")
let fresh = RateWindow(usedPercent: 62, windowMinutes: nil, resetsAt: nil, resetDescription: nil)
let result = fresh.backfillingResetTime(from: cached, now: now)
XCTAssertNil(result.resetsAt)
XCTAssertNil(result.windowMinutes)
XCTAssertNil(result.resetDescription)
}
func test_snapshotBackfillPreservesCurrentSnapshotFields() {
let now = Date(timeIntervalSince1970: 1_800_000_000)
let reset = now.addingTimeInterval(3600)
let identity = ProviderIdentitySnapshot(
providerID: .claude,
accountEmail: "peter@example.com",
accountOrganization: "Org",
loginMethod: "OAuth")
let cached = UsageSnapshot(
primary: RateWindow(usedPercent: 40, windowMinutes: 300, resetsAt: reset, resetDescription: "Soon"),
secondary: nil,
updatedAt: now.addingTimeInterval(-300),
identity: identity)
let extra = NamedRateWindow(
id: "overflow",
title: "Overflow",
window: RateWindow(
usedPercent: 12,
windowMinutes: nil,
resetsAt: nil,
resetDescription: nil,
nextRegenPercent: 2))
let fresh = UsageSnapshot(
primary: RateWindow(
usedPercent: 66,
windowMinutes: nil,
resetsAt: nil,
resetDescription: nil,
nextRegenPercent: 7),
secondary: nil,
extraRateWindows: [extra],
cursorRequests: CursorRequestUsage(used: 10, limit: 50),
subscriptionExpiresAt: reset.addingTimeInterval(86400),
subscriptionRenewsAt: reset.addingTimeInterval(43200),
updatedAt: now,
identity: identity)
let result = fresh.backfillingResetTimes(from: cached, now: now)
XCTAssertEqual(result.primary?.resetsAt, reset)
XCTAssertEqual(result.primary?.usedPercent, 66)
XCTAssertEqual(result.primary?.nextRegenPercent, 7)
XCTAssertEqual(result.extraRateWindows?.first?.id, "overflow")
XCTAssertEqual(result.extraRateWindows?.first?.window.nextRegenPercent, 2)
XCTAssertEqual(result.cursorRequests?.used, 10)
XCTAssertEqual(result.subscriptionExpiresAt, reset.addingTimeInterval(86400))
XCTAssertEqual(result.subscriptionRenewsAt, reset.addingTimeInterval(43200))
XCTAssertEqual(result.identity?.accountEmail, "peter@example.com")
}
func test_snapshotBackfillSkipsDifferentAccounts() {
let now = Date(timeIntervalSince1970: 1_800_000_000)
let cached = UsageSnapshot(
primary: RateWindow(
usedPercent: 40,
windowMinutes: 300,
resetsAt: now.addingTimeInterval(3600),
resetDescription: "Soon"),
secondary: nil,
updatedAt: now.addingTimeInterval(-300),
identity: ProviderIdentitySnapshot(
providerID: .claude,
accountEmail: "old@example.com",
accountOrganization: nil,
loginMethod: nil))
let fresh = UsageSnapshot(
primary: RateWindow(usedPercent: 66, windowMinutes: nil, resetsAt: nil, resetDescription: nil),
secondary: nil,
updatedAt: now,
identity: ProviderIdentitySnapshot(
providerID: .claude,
accountEmail: "new@example.com",
accountOrganization: nil,
loginMethod: nil))
let result = fresh.backfillingResetTimes(from: cached, now: now)
XCTAssertNil(result.primary?.resetsAt)
}
func test_snapshotBackfillKeepsOtherProviderResetWhenDescriptionChanges() {
let now = Date(timeIntervalSince1970: 1_800_000_000)
let reset = now.addingTimeInterval(3600)
let identity = ProviderIdentitySnapshot(
providerID: .claude,
accountEmail: "user@example.com",
accountOrganization: nil,
loginMethod: nil)
let cached = UsageSnapshot(
primary: RateWindow(
usedPercent: 40,
windowMinutes: 300,
resetsAt: reset,
resetDescription: "40 / 100 used"),
secondary: nil,
updatedAt: now.addingTimeInterval(-300),
identity: identity)
let fresh = UsageSnapshot(
primary: RateWindow(
usedPercent: 50,
windowMinutes: 300,
resetsAt: nil,
resetDescription: "50 / 100 used"),
secondary: nil,
updatedAt: now,
identity: identity)
let result = fresh.backfillingResetTimes(from: cached, now: now)
XCTAssertEqual(result.primary?.resetsAt, reset)
XCTAssertEqual(result.primary?.resetDescription, "50 / 100 used")
}
}