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

159 lines
5.8 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBar
@MainActor
struct MenuDescriptorAntigravityTests {
@Test
func `antigravity identity only snapshot shows limits unavailable`() throws {
let suite = "MenuDescriptorAntigravityTests-unavailable"
let defaults = try #require(UserDefaults(suiteName: suite))
defaults.removePersistentDomain(forName: suite)
let settings = SettingsStore(
userDefaults: defaults,
configStore: testConfigStore(suiteName: suite),
zaiTokenStore: NoopZaiTokenStore(),
syntheticTokenStore: NoopSyntheticTokenStore())
settings.statusChecksEnabled = false
let store = UsageStore(
fetcher: UsageFetcher(environment: [:]),
browserDetection: BrowserDetection(cacheTTL: 0),
settings: settings)
let snapshot = UsageSnapshot(
primary: nil,
secondary: nil,
updatedAt: Date(),
identity: ProviderIdentitySnapshot(
providerID: .antigravity,
accountEmail: "user@example.com",
accountOrganization: nil,
loginMethod: "Paid"))
store._setSnapshotForTesting(snapshot, provider: .antigravity)
let descriptor = MenuDescriptor.build(
provider: .antigravity,
store: store,
settings: settings,
account: AccountInfo(email: nil, plan: nil),
updateReady: false,
includeContextualActions: false)
let lines = descriptor.sections
.flatMap(\.entries)
.compactMap { entry -> String? in
guard case let .text(text, _) = entry else { return nil }
return text
}
#expect(lines.contains("Limits not available"))
}
@Test
func `antigravity menu does not add unavailable notes for missing families`() throws {
let suite = "MenuDescriptorAntigravityTests-missing-gemini"
let defaults = try #require(UserDefaults(suiteName: suite))
defaults.removePersistentDomain(forName: suite)
let settings = SettingsStore(
userDefaults: defaults,
configStore: testConfigStore(suiteName: suite),
zaiTokenStore: NoopZaiTokenStore(),
syntheticTokenStore: NoopSyntheticTokenStore())
settings.statusChecksEnabled = false
let store = UsageStore(
fetcher: UsageFetcher(environment: [:]),
browserDetection: BrowserDetection(cacheTTL: 0),
settings: settings)
let snapshot = UsageSnapshot(
primary: RateWindow(
usedPercent: 10,
windowMinutes: nil,
resetsAt: Date().addingTimeInterval(3600),
resetDescription: nil),
secondary: nil,
tertiary: nil,
updatedAt: Date(),
identity: ProviderIdentitySnapshot(
providerID: .antigravity,
accountEmail: nil,
accountOrganization: nil,
loginMethod: "Pro"))
store._setSnapshotForTesting(snapshot, provider: .antigravity)
let descriptor = MenuDescriptor.build(
provider: .antigravity,
store: store,
settings: settings,
account: AccountInfo(email: nil, plan: nil),
updateReady: false,
includeContextualActions: false)
let lines = descriptor.sections
.flatMap(
\.entries)
.compactMap { entry -> String? in
guard case let .text(text, _) = entry else { return nil }
return text
}
#expect(!lines.contains("Gemini Pro unavailable."))
#expect(!lines.contains("Gemini Flash unavailable."))
#expect(!lines.contains("Limits not available"))
}
@Test
func `antigravity descriptor does not render session pace for weekly primary window`() throws {
let suite = "MenuDescriptorAntigravityTests-weekly-primary-pace"
let defaults = try #require(UserDefaults(suiteName: suite))
defaults.removePersistentDomain(forName: suite)
let settings = SettingsStore(
userDefaults: defaults,
configStore: testConfigStore(suiteName: suite),
zaiTokenStore: NoopZaiTokenStore(),
syntheticTokenStore: NoopSyntheticTokenStore())
settings.statusChecksEnabled = false
let store = UsageStore(
fetcher: UsageFetcher(environment: [:]),
browserDetection: BrowserDetection(cacheTTL: 0),
settings: settings)
let snapshot = UsageSnapshot(
primary: RateWindow(
usedPercent: 80,
windowMinutes: 10080,
resetsAt: Date().addingTimeInterval(2 * 24 * 3600),
resetDescription: nil),
secondary: nil,
tertiary: nil,
updatedAt: Date(),
identity: ProviderIdentitySnapshot(
providerID: .antigravity,
accountEmail: nil,
accountOrganization: nil,
loginMethod: "Pro"))
store._setSnapshotForTesting(snapshot, provider: .antigravity)
let descriptor = MenuDescriptor.build(
provider: .antigravity,
store: store,
settings: settings,
account: AccountInfo(email: nil, plan: nil),
updateReady: false,
includeContextualActions: false)
let lines = descriptor.sections
.flatMap(\.entries)
.compactMap { entry -> String? in
guard case let .text(text, _) = entry else { return nil }
return text
}
#expect(!lines.contains { $0.hasPrefix("Pace:") })
}
}