Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 0 additions & 50 deletions Sources/CodexBar/StatusItemController+Animation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,6 @@ extension StatusItemController {
return false
}

// swiftlint:disable function_body_length
@discardableResult
func applyIcon(phase: Double?) -> Bool {
guard let button = self.statusItem.button else { return false }
Expand Down Expand Up @@ -336,30 +335,6 @@ extension StatusItemController {
return false
}

if Self.shouldUseOpenRouterBrandFallback(provider: primaryProvider, snapshot: snapshot),
let brand = ProviderBrandIcon.image(for: primaryProvider)
{
let signature = [
"mode=openRouterFallback",
"provider=\(primaryProvider.rawValue)",
"style=\(String(describing: style))",
"primary=\(debugDouble(primary))",
"weekly=\(debugDouble(weekly))",
"credits=\(debugDouble(credits))",
"stale=\(stale ? "1" : "0")",
"status=\(statusIndicator.rawValue)",
"anim=\(needsAnimation ? "1" : "0")",
].joined(separator: "|")
if self.shouldSkipMergedIconRender(signature) {
return true
}
self.setButtonTitle(nil, for: button)
self.setButtonImage(
Self.brandImageWithStatusOverlay(brand: brand, statusIndicator: statusIndicator),
for: button)
return false
}

self.setButtonTitle(nil, for: button)
if let morphProgress {
let signature = [
Expand Down Expand Up @@ -408,8 +383,6 @@ extension StatusItemController {
return false
}

// swiftlint:enable function_body_length

private func shouldSkipMergedIconRender(_ signature: String) -> Bool {
guard self.shouldMergeIcons else {
self.lastAppliedMergedIconRenderSignature = signature
Expand Down Expand Up @@ -440,17 +413,6 @@ extension StatusItemController {
return
}

if Self.shouldUseOpenRouterBrandFallback(provider: provider, snapshot: snapshot),
let brand = ProviderBrandIcon.image(for: provider)
{
self.setButtonTitle(nil, for: button)
self.setButtonImage(
Self.brandImageWithStatusOverlay(
brand: brand,
statusIndicator: self.store.statusIndicator(for: provider)),
for: button)
return
}
let resolved = snapshot.map {
IconRemainingResolver.resolvedPercents(
snapshot: $0,
Expand Down Expand Up @@ -775,18 +737,6 @@ extension StatusItemController {
}
}

nonisolated static func shouldUseOpenRouterBrandFallback(
provider: UsageProvider,
snapshot: UsageSnapshot?) -> Bool
{
guard provider == .openrouter,
let openRouterUsage = snapshot?.openRouterUsage
else {
return false
}
return openRouterUsage.keyQuotaStatus == .noLimitConfigured
}

nonisolated static func brandImageWithStatusOverlay(
brand: NSImage,
statusIndicator: ProviderStatusIndicator) -> NSImage
Expand Down
24 changes: 24 additions & 0 deletions Tests/CodexBarTests/ProvidersPaneCoverageTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,30 @@ struct ProvidersPaneCoverageTests {
#expect(row?.value == "$4.61")
}

@Test
func `open router provider pane shows balance and no quota metric when key limit is not configured`() {
let settings = Self.makeSettingsStore(suite: "ProvidersPaneCoverageTests-openrouter-no-key-limit")
let store = Self.makeUsageStore(settings: settings)
let snapshot = OpenRouterUsageSnapshot(
totalCredits: 50,
totalUsage: 45,
balance: 5, // balance = totalCredits - totalUsage
usedPercent: 90,
keyDataFetched: true,
keyLimit: nil,
keyUsage: nil,
rateLimit: nil,
updatedAt: Date()).toUsageSnapshot()
store._setSnapshotForTesting(snapshot, provider: .openrouter)

let pane = ProvidersPane(settings: settings, store: store)
let model = pane._test_menuCardModel(for: .openrouter)

#expect(model.planText == "Balance: $5.00")
#expect(model.metrics.isEmpty)
#expect(model.usageNotes == ["No limit set for the API key"])
}

@Test
func `provider detail plan row keeps plan label for non open router`() {
let row = ProviderDetailView<EmptyView>.planRow(provider: .codex, planText: "Pro")
Expand Down
39 changes: 25 additions & 14 deletions Tests/CodexBarTests/StatusItemControllerMenuTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,44 +97,52 @@ struct StatusItemControllerMenuTests {
}

@Test
func `open router brand fallback enabled when no key limit configured`() {
func `open router key data unavailable uses color bar path with nil primary percent`() {
let snapshot = OpenRouterUsageSnapshot(
totalCredits: 50,
totalUsage: 45,
balance: 5,
usedPercent: 90,
keyDataFetched: true,
keyDataFetched: false,
keyLimit: nil,
keyUsage: nil,
rateLimit: nil,
updatedAt: Date()).toUsageSnapshot()

#expect(StatusItemController.shouldUseOpenRouterBrandFallback(
provider: .openrouter,
snapshot: snapshot))
#expect(snapshot.openRouterUsage?.keyQuotaStatus == .unavailable)
let resolved = IconRemainingResolver.resolvedPercents(
snapshot: snapshot,
style: .openrouter,
showUsed: false)
#expect(resolved.primary == nil)
#expect(resolved.secondary == nil)
#expect(MenuBarDisplayText.percentText(window: snapshot.primary, showUsed: false) == nil)
}

@Test
func `open router brand fallback disabled when key quota fetch unavailable`() {
func `open router no key limit uses color bar path with nil primary percent`() {
let snapshot = OpenRouterUsageSnapshot(
totalCredits: 50,
totalUsage: 45,
balance: 5,
usedPercent: 90,
keyDataFetched: false,
keyDataFetched: true,
keyLimit: nil,
keyUsage: nil,
rateLimit: nil,
updatedAt: Date()).toUsageSnapshot()

#expect(!StatusItemController.shouldUseOpenRouterBrandFallback(
provider: .openrouter,
snapshot: snapshot))
let resolved = IconRemainingResolver.resolvedPercents(
snapshot: snapshot,
style: .openrouter,
showUsed: false)
#expect(resolved.primary == nil)
#expect(resolved.secondary == nil)
#expect(MenuBarDisplayText.percentText(window: snapshot.primary, showUsed: false) == nil)
}

@Test
func `open router brand fallback disabled when key quota available`() {
func `open router key quota uses color bar path with primary percent`() {
let snapshot = OpenRouterUsageSnapshot(
totalCredits: 50,
totalUsage: 45,
Expand All @@ -145,10 +153,13 @@ struct StatusItemControllerMenuTests {
rateLimit: nil,
updatedAt: Date()).toUsageSnapshot()

#expect(!StatusItemController.shouldUseOpenRouterBrandFallback(
provider: .openrouter,
snapshot: snapshot))
#expect(snapshot.primary?.usedPercent == 10)
let resolved = IconRemainingResolver.resolvedPercents(
snapshot: snapshot,
style: .openrouter,
showUsed: false)
#expect(resolved.primary == 90)
#expect(resolved.secondary == nil)
}

@Test
Expand Down