Files
orca/mobile/src/mock-server-account-state.test.ts
T
kazu-42andBrennan Benson 4a71a0ecb2 feat(mobile): add safe Codex rate-limit resets (#9394)
* feat(mobile): add safe Codex rate-limit resets

* fix(mobile): address reset credit review feedback

* review: purge removed-account reset attempts, shared capability constant, rebase test mocks

* review: preserve host compatibility and reset durability

* fix(mobile): recover reset capability after cutover

* fix(mobile): validate runtime capability payloads

* fix(mobile): enforce capability payload contract

* fix(mobile): route mock terminals to selected worktree

* test(mobile): pin malformed probe retry behavior

---------

Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
2026-07-24 14:42:04 -07:00

61 lines
2.3 KiB
TypeScript

import { beforeEach, describe, expect, it } from 'vitest'
import {
consumeMockCodexResetCredit,
createMockAccountsSnapshot,
getMockCodexResetScope,
resetMockAccountState,
selectMockCodexAccount
} from '../scripts/mock-server-account-state'
const FIRST_OPERATION_ID = '11111111-1111-4111-8111-111111111111'
describe('mock account reset state', () => {
beforeEach(() => {
resetMockAccountState(1_700_000_000_000)
})
it('keeps reset and expiry deadlines fixed between snapshots', () => {
const first = createMockAccountsSnapshot()
const second = createMockAccountsSnapshot()
expect(second.rateLimits.codex.session?.resetsAt).toBe(first.rateLimits.codex.session?.resetsAt)
expect(second.rateLimits.codex.rateLimitResetCredits.nextExpiresAt).toBe(
first.rateLimits.codex.rateLimitResetCredits.nextExpiresAt
)
})
it('resets only the selected account and updates its visible usage', () => {
const personalScope = getMockCodexResetScope()
expect(personalScope).not.toBeNull()
expect(consumeMockCodexResetCredit(FIRST_OPERATION_ID, personalScope)).toMatchObject({
outcome: 'reset',
scope: personalScope
})
const personalAfter = createMockAccountsSnapshot()
expect(personalAfter.rateLimits.codex.session?.usedPercent).toBe(0)
expect(personalAfter.rateLimits.codex.rateLimitResetCredits.availableCount).toBe(0)
selectMockCodexAccount('codex-team')
const team = createMockAccountsSnapshot()
expect(team.rateLimits.codex.session?.usedPercent).toBe(100)
expect(team.rateLimits.codex.rateLimitResetCredits.availableCount).toBe(1)
expect(getMockCodexResetScope()?.accountId).toBe('codex-team')
})
it('replays the same operation result and authoritatively discards a stale attempt', () => {
const scope = getMockCodexResetScope()
expect(scope).not.toBeNull()
const first = consumeMockCodexResetCredit(FIRST_OPERATION_ID, scope)
expect(consumeMockCodexResetCredit(FIRST_OPERATION_ID, scope)).toEqual(first)
expect(() => consumeMockCodexResetCredit('not-a-uuid', scope)).toThrow('Invalid idempotencyKey')
expect(consumeMockCodexResetCredit('22222222-2222-4222-8222-222222222222', scope)).toEqual({
status: 'rejectedBeforeProvider',
retryDisposition: 'discardAttempt',
reason: 'offerChanged',
scope
})
})
})