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

169 lines
5.7 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
struct MistralMenuCardModelTests {
@Test
func `mistral credit balance renders like deepseek balance`() throws {
let now = Date()
let credits = MistralCreditsSnapshot(
walletAmount: 0,
creditNotesAmount: 0,
ongoingUsageBalance: 0,
currency: "USD")
let snapshot = MistralUsageSnapshot(
totalCost: 0,
currency: "USD",
currencySymbol: "$",
totalInputTokens: 0,
totalOutputTokens: 0,
totalCachedTokens: 0,
modelCount: 0,
credits: credits,
startDate: nil,
endDate: nil,
updatedAt: now)
.toUsageSnapshot()
let metadata = try #require(ProviderDefaults.metadata[.mistral])
let model = UsageMenuCardView.Model.make(.init(
provider: .mistral,
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))
let primary = try #require(model.metrics.first)
#expect(primary.title == "Balance")
#expect(primary.statusText == "$0.00")
#expect(primary.resetText == nil)
#expect(primary.detailText == nil)
}
@Test
func `mistral credit balance renders separately from primary percent lane`() throws {
let now = Date()
let credits = MistralCreditsSnapshot(
walletAmount: 10,
creditNotesAmount: 2.5,
ongoingUsageBalance: 0,
currency: "USD")
let usage = MistralUsageSnapshot(
totalCost: 0,
currency: "USD",
currencySymbol: "$",
totalInputTokens: 0,
totalOutputTokens: 0,
totalCachedTokens: 0,
modelCount: 0,
credits: credits,
startDate: nil,
endDate: nil,
updatedAt: now)
.toUsageSnapshot()
let snapshot = UsageSnapshot(
primary: RateWindow(
usedPercent: 73,
windowMinutes: nil,
resetsAt: now.addingTimeInterval(3 * 24 * 60 * 60),
resetDescription: "API spend this month"),
secondary: nil,
tertiary: nil,
mistralUsage: usage.mistralUsage,
updatedAt: now,
identity: usage.identity)
let metadata = try #require(ProviderDefaults.metadata[.mistral])
let model = UsageMenuCardView.Model.make(.init(
provider: .mistral,
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))
let primary = try #require(model.metrics.first)
#expect(primary.id == "mistral-balance")
#expect(primary.statusText == "$12.50")
#expect(primary.detailText == nil)
#expect(primary.resetText == nil)
let percentMetric = try #require(model.metrics.dropFirst().first)
#expect(percentMetric.id == "primary")
#expect(percentMetric.percent == 27)
#expect(percentMetric.detailText == "API spend this month")
}
@Test
func `mistral model surfaces monthly cost as primary detail text`() throws {
let now = Date()
let resetsAt = now.addingTimeInterval(3 * 24 * 60 * 60)
let identity = ProviderIdentitySnapshot(
providerID: .mistral,
accountEmail: nil,
accountOrganization: nil,
loginMethod: nil)
let snapshot = UsageSnapshot(
primary: RateWindow(
usedPercent: 0,
windowMinutes: nil,
resetsAt: resetsAt,
resetDescription: "€1.2345 this month"),
secondary: nil,
tertiary: nil,
updatedAt: now,
identity: identity)
let metadata = try #require(ProviderDefaults.metadata[.mistral])
let model = UsageMenuCardView.Model.make(.init(
provider: .mistral,
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: true,
resetTimeDisplayStyle: .countdown,
tokenCostUsageEnabled: false,
showOptionalCreditsAndExtraUsage: true,
hidePersonalInfo: false,
now: now))
let primary = try #require(model.metrics.first)
#expect(primary.detailText == "€1.2345 this month")
#expect(primary.resetText?.hasPrefix("Resets") == true)
}
}