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

98 lines
3.5 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
struct DoubaoMenuCardModelTests {
@Test
func `coding plan monthly quota shows deficit and run out details`() throws {
let now = Date(timeIntervalSince1970: 10_368_000) // 1970-05-01T00:00:00Z
let reset = now.addingTimeInterval(6 * 24 * 3600)
let snapshot = UsageSnapshot(
primary: RateWindow(
usedPercent: 25,
windowMinutes: 5 * 60,
resetsAt: now.addingTimeInterval(2 * 3600),
resetDescription: nil),
secondary: RateWindow(
usedPercent: 40,
windowMinutes: 7 * 24 * 60,
resetsAt: now.addingTimeInterval(4 * 24 * 3600),
resetDescription: nil),
tertiary: RateWindow(
usedPercent: 90,
windowMinutes: 30 * 24 * 60,
resetsAt: reset,
resetDescription: nil),
updatedAt: now,
identity: nil)
let metadata = try #require(ProviderDefaults.metadata[.doubao])
let model = UsageMenuCardView.Model.make(.init(
provider: .doubao,
metadata: metadata,
snapshot: snapshot,
credits: nil,
creditsError: nil,
dashboard: nil,
dashboardError: nil,
tokenSnapshot: nil,
tokenError: nil,
account: AccountInfo(email: nil, plan: nil),
isRefreshing: false,
lastError: nil,
usageBarsShowUsed: false,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: false,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
#expect(model.metrics.map(\.title) == ["5-hour", "Weekly", "Monthly"])
let monthly = try #require(model.metrics.first { $0.id == "tertiary" })
#expect(monthly.percentLabel == "10% left")
#expect(monthly.detailLeftText == "10% in deficit")
#expect(monthly.detailRightText == "Runs out in 2d 16h")
#expect(monthly.pacePercent == 20)
#expect(monthly.paceOnTop == false)
}
@Test
func `unknown request limit renders unavailable instead of full quota`() throws {
let now = Date(timeIntervalSince1970: 1_742_771_200)
let metadata = try #require(ProviderDefaults.metadata[.doubao])
let snapshot = DoubaoUsageSnapshot(
remainingRequests: 0,
limitRequests: 1000,
resetTime: nil,
updatedAt: now,
apiKeyValid: true,
requestLimitsReliable: false)
.toUsageSnapshot()
let model = UsageMenuCardView.Model.make(.init(
provider: .doubao,
metadata: metadata,
snapshot: snapshot,
credits: nil,
creditsError: nil,
dashboard: nil,
dashboardError: nil,
tokenSnapshot: nil,
tokenError: nil,
account: AccountInfo(email: nil, plan: nil),
isRefreshing: false,
lastError: nil,
usageBarsShowUsed: false,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: false,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
#expect(model.metrics.isEmpty)
#expect(model.placeholder == "Limits not available")
#expect(model.subtitleStyle == .info)
}
}