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

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)
}
}