77 lines
3.0 KiB
Swift
77 lines
3.0 KiB
Swift
import CodexBarCore
|
|
import Foundation
|
|
import Testing
|
|
@testable import CodexBar
|
|
|
|
/// Menu-model coverage for claude-swap account cards: the provider-neutral
|
|
/// projection renders as a regular Claude usage card with session/weekly
|
|
/// windows, account identity, and Hide Personal Info redaction.
|
|
struct MenuCardClaudeSwapAccountTests {
|
|
private func makeModel(
|
|
hidePersonalInfo: Bool,
|
|
planOverride: String? = nil) throws -> UsageMenuCardView.Model
|
|
{
|
|
let now = Date(timeIntervalSince1970: 1_782_000_000)
|
|
let metadata = try #require(ProviderDefaults.metadata[.claude])
|
|
let list = ClaudeSwapAccountList(
|
|
activeAccountNumber: 2,
|
|
accounts: [
|
|
ClaudeSwapAccountRow(
|
|
number: 2,
|
|
email: "personal@example.com",
|
|
isActive: true,
|
|
usageStatus: .ok,
|
|
fiveHour: ClaudeSwapUsageWindow(usedPercent: 25, resetsAt: now.addingTimeInterval(3600)),
|
|
sevenDay: ClaudeSwapUsageWindow(usedPercent: 60, resetsAt: now.addingTimeInterval(86400))),
|
|
])
|
|
let account = try #require(ClaudeSwapAccountProjection.accountSnapshots(from: list, now: now).first)
|
|
|
|
return UsageMenuCardView.Model.make(.init(
|
|
provider: .claude,
|
|
metadata: metadata,
|
|
snapshot: account.snapshot,
|
|
credits: nil,
|
|
creditsError: nil,
|
|
dashboard: nil,
|
|
dashboardError: nil,
|
|
tokenSnapshot: nil,
|
|
tokenError: nil,
|
|
account: AccountInfo(email: account.displayLabel, plan: nil),
|
|
planOverride: planOverride,
|
|
isRefreshing: false,
|
|
lastError: account.error,
|
|
usageBarsShowUsed: true,
|
|
resetTimeDisplayStyle: .countdown,
|
|
tokenCostUsageEnabled: false,
|
|
showOptionalCreditsAndExtraUsage: false,
|
|
hidePersonalInfo: hidePersonalInfo,
|
|
now: now))
|
|
}
|
|
|
|
@Test
|
|
func `claude swap action overrides adapter login method`() throws {
|
|
let model = try self.makeModel(hidePersonalInfo: false, planOverride: "Switch Account...")
|
|
|
|
#expect(model.planText == "Switch Account...")
|
|
}
|
|
|
|
@Test
|
|
func `claude swap account snapshot renders session and weekly metrics with identity`() throws {
|
|
let model = try self.makeModel(hidePersonalInfo: false)
|
|
|
|
#expect(model.email == "personal@example.com")
|
|
let primary = try #require(model.metrics.first(where: { $0.id == "primary" }))
|
|
#expect(primary.percent == 25)
|
|
let secondary = try #require(model.metrics.first(where: { $0.id == "secondary" }))
|
|
#expect(secondary.percent == 60)
|
|
}
|
|
|
|
@Test
|
|
func `claude swap account card respects hide personal info`() throws {
|
|
let model = try self.makeModel(hidePersonalInfo: true)
|
|
|
|
#expect(!model.email.contains("personal@example.com"))
|
|
#expect(!model.email.contains("example.com"))
|
|
}
|
|
}
|