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

52 lines
1.9 KiB
Swift

import AppKit
import CodexBarCore
import Testing
@testable import CodexBar
@Suite(.serialized)
@MainActor
struct StatusItemAnimationCodexCreditsTests {
@Test
func `codex icon keeps credits only rendering when usage is missing`() {
let settings = testSettingsStore(suiteName: "StatusItemAnimationTests-credits-only-icon")
settings.statusChecksEnabled = false
settings.refreshFrequency = .manual
settings.mergeIcons = false
settings.menuBarShowsBrandIconWithPercent = false
let registry = ProviderRegistry.shared
if let codexMeta = registry.metadata[.codex] {
settings.setProviderEnabled(provider: .codex, metadata: codexMeta, enabled: true)
}
let fetcher = UsageFetcher()
let store = UsageStore(fetcher: fetcher, browserDetection: BrowserDetection(cacheTTL: 0), settings: settings)
store._setSnapshotForTesting(nil, provider: .codex)
store.credits = CreditsSnapshot(remaining: 80, events: [], updatedAt: Date())
let controller = StatusItemController(
store: store,
settings: settings,
account: fetcher.loadAccountInfo(),
updater: DisabledUpdaterController(),
preferencesSelection: PreferencesSelection(),
statusBar: testStatusBar())
defer { controller.releaseStatusItemsForTesting() }
controller.applyIcon(for: .codex, phase: nil)
guard let image = controller.statusItems[.codex]?.button?.image else {
#expect(Bool(false))
return
}
let rep = image.representations.compactMap { $0 as? NSBitmapImageRep }.first(where: {
$0.pixelsWide == 36 && $0.pixelsHigh == 36
})
#expect(rep != nil)
guard let rep else { return }
let creditsOnlyAlpha = (rep.colorAt(x: 18, y: 17) ?? .clear).alphaComponent
#expect(creditsOnlyAlpha > 0.05)
}
}