607 lines · 21.5 KB · Swift
RawDownload
import CodexBarCoreimport Foundationimport SwiftUIimport Testing@testable import CodexBar @Suitestruct MenuCardModelTests {    @Test    func buildsMetricsUsingRemainingPercent() throws {        let now = Date()        let identity = ProviderIdentitySnapshot(            providerID: .codex,            accountEmail: "codex@example.com",            accountOrganization: nil,            loginMethod: "Plus Plan")        let snapshot = UsageSnapshot(            primary: RateWindow(                usedPercent: 22,                windowMinutes: 300,                resetsAt: now.addingTimeInterval(3000),                resetDescription: nil),            secondary: RateWindow(                usedPercent: 40,                windowMinutes: 10080,                resetsAt: now.addingTimeInterval(6000),                resetDescription: nil),            updatedAt: now,            identity: identity)        let metadata = try #require(ProviderDefaults.metadata[.codex])        let updatedSnap = try UsageSnapshot(            primary: snapshot.primary,            secondary: RateWindow(                usedPercent: #require(snapshot.secondary?.usedPercent),                windowMinutes: #require(snapshot.secondary?.windowMinutes),                resetsAt: now.addingTimeInterval(3600),                resetDescription: nil),            tertiary: snapshot.tertiary,            updatedAt: now,            identity: identity)         let model = UsageMenuCardView.Model.make(.init(            provider: .codex,            metadata: metadata,            snapshot: updatedSnap,            credits: CreditsSnapshot(remaining: 12, events: [], updatedAt: now),            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: "codex@example.com", plan: "Plus Plan"),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: now))         #expect(model.providerName == "Codex")        #expect(model.metrics.count == 2)        #expect(model.metrics.first?.percent == 78)        #expect(model.planText == "Plus")        #expect(model.subtitleText.hasPrefix("Updated"))        #expect(model.progressColor != Color.clear)        #expect(model.metrics[1].resetText?.isEmpty == false)    }     @Test    func buildsMetricsUsingUsedPercentWhenEnabled() throws {        let now = Date()        let identity = ProviderIdentitySnapshot(            providerID: .codex,            accountEmail: "codex@example.com",            accountOrganization: nil,            loginMethod: "Plus Plan")        let snapshot = UsageSnapshot(            primary: RateWindow(                usedPercent: 22,                windowMinutes: 300,                resetsAt: now.addingTimeInterval(3000),                resetDescription: nil),            secondary: RateWindow(                usedPercent: 40,                windowMinutes: 10080,                resetsAt: now.addingTimeInterval(6000),                resetDescription: nil),            updatedAt: now,            identity: identity)        let metadata = try #require(ProviderDefaults.metadata[.codex])         let dashboard = OpenAIDashboardSnapshot(            signedInEmail: "codex@example.com",            codeReviewRemainingPercent: 73,            creditEvents: [],            dailyBreakdown: [],            usageBreakdown: [],            creditsPurchaseURL: nil,            updatedAt: now)         let model = UsageMenuCardView.Model.make(.init(            provider: .codex,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: dashboard,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: "codex@example.com", plan: "Plus Plan"),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: true,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: now))         #expect(model.metrics.first?.title == "Session")        #expect(model.metrics.first?.percent == 22)        #expect(model.metrics.first?.percentLabel.contains("used") == true)        #expect(model.metrics.contains { $0.title == "Code review" && $0.percent == 27 })    }     @Test    func showsCodeReviewMetricWhenDashboardPresent() throws {        let now = Date()        let identity = ProviderIdentitySnapshot(            providerID: .codex,            accountEmail: "codex@example.com",            accountOrganization: nil,            loginMethod: nil)        let snapshot = UsageSnapshot(            primary: RateWindow(usedPercent: 0, windowMinutes: 300, resetsAt: nil, resetDescription: nil),            secondary: nil,            tertiary: nil,            updatedAt: now,            identity: identity)        let metadata = try #require(ProviderDefaults.metadata[.codex])         let dashboard = OpenAIDashboardSnapshot(            signedInEmail: "codex@example.com",            codeReviewRemainingPercent: 73,            creditEvents: [],            dailyBreakdown: [],            usageBreakdown: [],            creditsPurchaseURL: nil,            updatedAt: now)        let model = UsageMenuCardView.Model.make(.init(            provider: .codex,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: dashboard,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: "codex@example.com", plan: nil),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: now))         #expect(model.metrics.contains { $0.title == "Code review" && $0.percent == 73 })    }     @Test    func claudeModelHidesWeeklyWhenUnavailable() throws {        let now = Date()        let identity = ProviderIdentitySnapshot(            providerID: .claude,            accountEmail: nil,            accountOrganization: nil,            loginMethod: "Max")        let snapshot = UsageSnapshot(            primary: RateWindow(                usedPercent: 2,                windowMinutes: nil,                resetsAt: now.addingTimeInterval(3600),                resetDescription: nil),            secondary: nil,            tertiary: nil,            updatedAt: now,            identity: identity)        let metadata = try #require(ProviderDefaults.metadata[.claude])        let model = UsageMenuCardView.Model.make(.init(            provider: .claude,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: "codex@example.com", plan: "plus"),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: now))         #expect(model.metrics.count == 1)        #expect(model.metrics.first?.title == "Session")        #expect(model.planText == "Max")    }     @Test    func showsErrorSubtitleWhenPresent() throws {        let metadata = try #require(ProviderDefaults.metadata[.codex])        let model = UsageMenuCardView.Model.make(.init(            provider: .codex,            metadata: metadata,            snapshot: nil,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: nil, plan: nil),            isRefreshing: false,            lastError: "Probe failed for Codex",            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: Date()))         #expect(model.subtitleStyle == .error)        #expect(model.subtitleText.contains("Probe failed"))        #expect(model.placeholder == nil)    }     @Test    func costSectionIncludesLast30DaysTokens() throws {        let now = Date()        let metadata = try #require(ProviderDefaults.metadata[.codex])        let snapshot = UsageSnapshot(            primary: RateWindow(usedPercent: 0, windowMinutes: 300, resetsAt: nil, resetDescription: nil),            secondary: nil,            tertiary: nil,            updatedAt: now)        let tokenSnapshot = CostUsageTokenSnapshot(            sessionTokens: 123,            sessionCostUSD: 1.23,            last30DaysTokens: 456,            last30DaysCostUSD: 78.9,            daily: [],            updatedAt: now)        let model = UsageMenuCardView.Model.make(.init(            provider: .codex,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: tokenSnapshot,            tokenError: nil,            account: AccountInfo(email: nil, plan: nil),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: true,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: now))         #expect(model.tokenUsage?.monthLine.contains("456") == true)        #expect(model.tokenUsage?.monthLine.contains("tokens") == true)    }     @Test    func claudeModelDoesNotLeakCodexPlan() throws {        let metadata = try #require(ProviderDefaults.metadata[.claude])        let model = UsageMenuCardView.Model.make(.init(            provider: .claude,            metadata: metadata,            snapshot: nil,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: "codex@example.com", plan: "plus"),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: Date()))         #expect(model.planText == nil)        #expect(model.email.isEmpty)    }     @Test    func hidesCodexCreditsWhenDisabled() throws {        let now = Date()        let identity = ProviderIdentitySnapshot(            providerID: .codex,            accountEmail: "codex@example.com",            accountOrganization: nil,            loginMethod: nil)        let snapshot = UsageSnapshot(            primary: RateWindow(usedPercent: 0, windowMinutes: 300, resetsAt: nil, resetDescription: nil),            secondary: nil,            tertiary: nil,            updatedAt: now,            identity: identity)        let metadata = try #require(ProviderDefaults.metadata[.codex])         let model = UsageMenuCardView.Model.make(.init(            provider: .codex,            metadata: metadata,            snapshot: snapshot,            credits: CreditsSnapshot(remaining: 12, events: [], updatedAt: now),            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: "codex@example.com", plan: nil),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: false,            hidePersonalInfo: false,            now: now))         #expect(model.creditsText == nil)    }     @Test    func hidesClaudeExtraUsageWhenDisabled() throws {        let now = Date()        let identity = ProviderIdentitySnapshot(            providerID: .claude,            accountEmail: "claude@example.com",            accountOrganization: nil,            loginMethod: nil)        let snapshot = UsageSnapshot(            primary: RateWindow(usedPercent: 0, windowMinutes: nil, resetsAt: nil, resetDescription: nil),            secondary: nil,            tertiary: nil,            providerCost: ProviderCostSnapshot(used: 12, limit: 200, currencyCode: "USD", updatedAt: now),            updatedAt: now,            identity: identity)        let metadata = try #require(ProviderDefaults.metadata[.claude])         let model = UsageMenuCardView.Model.make(.init(            provider: .claude,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: nil, plan: nil),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: false,            hidePersonalInfo: false,            now: now))         #expect(model.providerCost == nil)    }     @Test    @MainActor    func openRouterModel_usesAPIKeyQuotaBarAndQuotaDetail() throws {        let now = Date()        let metadata = try #require(ProviderDefaults.metadata[.openrouter])        let snapshot = OpenRouterUsageSnapshot(            totalCredits: 50,            totalUsage: 45.3895596325,            balance: 4.6104403675,            usedPercent: 90.779119265,            keyLimit: 20,            keyUsage: 0.5,            rateLimit: nil,            updatedAt: now).toUsageSnapshot()         let model = UsageMenuCardView.Model.make(.init(            provider: .openrouter,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: nil, plan: nil),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: now))         #expect(model.creditsText == nil)        #expect(model.metrics.count == 1)        #expect(model.usageNotes.isEmpty)        let metric = try #require(model.metrics.first)        let popupTitle = UsageMenuCardView.popupMetricTitle(            provider: .openrouter,            metric: metric)        #expect(popupTitle == "API key limit")        #expect(metric.resetText == "$19.50/$20.00 left")        #expect(metric.detailRightText == nil)    }     @Test    func openRouterModel_withoutKeyLimitShowsTextOnlySummary() throws {        let now = Date()        let metadata = try #require(ProviderDefaults.metadata[.openrouter])        let snapshot = OpenRouterUsageSnapshot(            totalCredits: 50,            totalUsage: 45.3895596325,            balance: 4.6104403675,            usedPercent: 90.779119265,            keyDataFetched: true,            keyLimit: nil,            keyUsage: nil,            rateLimit: nil,            updatedAt: now).toUsageSnapshot()         let model = UsageMenuCardView.Model.make(.init(            provider: .openrouter,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: nil,            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: nil, plan: nil),            isRefreshing: false,            lastError: nil,            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: false,            now: now))         #expect(model.metrics.isEmpty)        #expect(model.creditsText == nil)        #expect(model.placeholder == nil)        #expect(model.usageNotes == ["No limit set for the API key"])    }     @Test    func openRouterModel_whenKeyFetchUnavailableShowsUnavailableNote() throws {        let now = Date()        let metadata = try #require(ProviderDefaults.metadata[.openrouter])        let snapshot = OpenRouterUsageSnapshot(            totalCredits: 50,            totalUsage: 45.3895596325,            balance: 4.6104403675,            usedPercent: 90.779119265,            keyDataFetched: false,            keyLimit: nil,            keyUsage: nil,            rateLimit: nil,            updatedAt: now).toUsageSnapshot()         let model = UsageMenuCardView.Model.make(.init(            provider: .openrouter,            metadata: metadata,            snapshot: snapshot,

Lines 1–500 of 607.