93 lines
3.4 KiB
Swift
93 lines
3.4 KiB
Swift
import SwiftUI
|
|
import Testing
|
|
@testable import CodexBar
|
|
|
|
struct MenuCardHeightFingerprintTests {
|
|
@Test
|
|
func `height fingerprint does not retain raw text fields`() {
|
|
let model = Self.model()
|
|
|
|
let fingerprint = model.heightFingerprint(section: "card")
|
|
|
|
#expect(!fingerprint.contains("very-secret@example.com"))
|
|
#expect(!fingerprint.contains("Secret Provider Name"))
|
|
#expect(!fingerprint.contains("Secret Metric"))
|
|
#expect(!fingerprint.contains("Secret note"))
|
|
}
|
|
|
|
@Test
|
|
func `height fingerprint field distinguishes nil from empty string`() {
|
|
let nilField = UsageMenuCardView.Model.heightFingerprintField("storage", nil)
|
|
let emptyField = UsageMenuCardView.Model.heightFingerprintField("storage", "")
|
|
|
|
#expect(nilField != emptyField)
|
|
}
|
|
|
|
@Test
|
|
func `height fingerprint keeps cheap metric percent identity`() {
|
|
let left = Self.model(percent: 42, percentStyle: .left).heightFingerprint(section: "card")
|
|
let used = Self.model(percent: 42, percentStyle: .used).heightFingerprint(section: "card")
|
|
let changedPercent = Self.model(percent: 43, percentStyle: .left).heightFingerprint(section: "card")
|
|
|
|
#expect(left != used)
|
|
#expect(left != changedPercent)
|
|
}
|
|
|
|
@Test
|
|
func `height fingerprint tracks reset-credit inventory shape`() {
|
|
let one = Self.model(resetCredits: CodexResetCreditsPresentation(
|
|
text: "1 available",
|
|
items: [.init(expiryText: "Expires in 1d", compactExpiryText: "1d")]))
|
|
let two = Self.model(resetCredits: CodexResetCreditsPresentation(
|
|
text: "2 available",
|
|
items: [
|
|
.init(expiryText: "Expires in 1d", compactExpiryText: "1d"),
|
|
.init(expiryText: "No expiry", compactExpiryText: "No expiry"),
|
|
]))
|
|
|
|
#expect(one.heightFingerprint(section: "card") != two.heightFingerprint(section: "card"))
|
|
}
|
|
|
|
private static func model(
|
|
percent: Double = 42,
|
|
percentStyle: UsageMenuCardView.Model.PercentStyle = .left,
|
|
resetCredits: CodexResetCreditsPresentation? = nil) -> UsageMenuCardView.Model
|
|
{
|
|
UsageMenuCardView.Model(
|
|
provider: .codex,
|
|
providerName: "Secret Provider Name",
|
|
email: "very-secret@example.com",
|
|
subtitleText: "Signed in as very-secret@example.com",
|
|
subtitleStyle: .info,
|
|
planText: "Secret Plan",
|
|
metrics: [
|
|
.init(
|
|
id: "primary",
|
|
title: "Secret Metric",
|
|
percent: percent,
|
|
percentStyle: percentStyle,
|
|
statusText: "Secret status",
|
|
resetText: nil,
|
|
detailText: nil,
|
|
detailLeftText: nil,
|
|
detailRightText: nil,
|
|
pacePercent: nil,
|
|
paceOnTop: true),
|
|
],
|
|
usageNotes: ["Secret note"],
|
|
openAIAPIUsage: nil,
|
|
inlineUsageDashboard: nil,
|
|
creditsText: nil,
|
|
creditsRemaining: nil,
|
|
creditsProgressPercent: nil,
|
|
creditsScaleText: nil,
|
|
creditsHintText: nil,
|
|
creditsHintCopyText: nil,
|
|
codexResetCredits: resetCredits,
|
|
providerCost: nil,
|
|
tokenUsage: nil,
|
|
placeholder: nil,
|
|
progressColor: .blue)
|
|
}
|
|
}
|