435 lines · 15.4 KB · Swift
RawDownload
import CodexBarCoreimport Foundationimport SwiftUIimport Testing@testable import CodexBar @Suitestruct MenuCardModelTests {    @Test    func buildsMetricsUsingRemainingPercent() {        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 = ProviderDefaults.metadata[.codex]!        let updatedSnap = UsageSnapshot(            primary: snapshot.primary,            secondary: RateWindow(                usedPercent: snapshot.secondary!.usedPercent,                windowMinutes: 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() {        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 = 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() {        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 = 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() {        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 = 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() {        let metadata = 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() {        let now = Date()        let metadata = 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() {        let metadata = 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() {        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 = 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() {        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 = 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    func hidesEmailWhenPersonalInfoHidden() {        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 = ProviderDefaults.metadata[.codex]!         let model = UsageMenuCardView.Model.make(.init(            provider: .codex,            metadata: metadata,            snapshot: snapshot,            credits: nil,            creditsError: nil,            dashboard: nil,            dashboardError: "OpenAI dashboard signed in as codex@example.com.",            tokenSnapshot: nil,            tokenError: nil,            account: AccountInfo(email: "codex@example.com", plan: nil),            isRefreshing: false,            lastError: "OpenAI dashboard signed in as codex@example.com.",            usageBarsShowUsed: false,            resetTimeDisplayStyle: .countdown,            tokenCostUsageEnabled: false,            showOptionalCreditsAndExtraUsage: true,            hidePersonalInfo: true,            now: now))         #expect(model.email == "Hidden")        #expect(model.subtitleText.contains("codex@example.com") == false)        #expect(model.creditsHintCopyText?.isEmpty == true)        #expect(model.creditsHintText?.contains("codex@example.com") == false)    }}