mirror of
https://github.com/stablyai/orca.git
synced 2026-10-20 08:03:28 +00:00
* fix(codex): migrate legacy shared-home resumes * fix(mobile): allow legacy Codex resume preparation
94 lines
3.1 KiB
TypeScript
94 lines
3.1 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import { createCodexSessionMigrationScheduler } from './codex-session-migration-scheduler'
|
|
|
|
describe('createCodexSessionMigrationScheduler', () => {
|
|
beforeEach(() => {
|
|
vi.useFakeTimers()
|
|
})
|
|
|
|
it('runs after a managed-account startup switches to host system default', async () => {
|
|
let eligible = false
|
|
const startBackfill = vi.fn().mockResolvedValue(null)
|
|
const startIndexHeal = vi.fn().mockResolvedValue(null)
|
|
const scheduler = createCodexSessionMigrationScheduler({
|
|
isEligible: () => eligible,
|
|
isQuitting: () => false,
|
|
resolveSystemCodexHomePathOverride: () => undefined,
|
|
startBackfill,
|
|
startIndexHeal
|
|
})
|
|
|
|
scheduler.scheduleInitialRun()
|
|
await vi.advanceTimersByTimeAsync(15_000)
|
|
expect(startBackfill).not.toHaveBeenCalled()
|
|
|
|
eligible = true
|
|
scheduler.requestRun()
|
|
await vi.waitFor(() => expect(startIndexHeal).toHaveBeenCalledOnce())
|
|
expect(startBackfill).toHaveBeenCalledOnce()
|
|
})
|
|
|
|
it('coalesces concurrent run requests and stops before index heal after opt-out', async () => {
|
|
let eligible = true
|
|
let releaseBackfill: (() => void) | undefined
|
|
const startBackfill = vi.fn(
|
|
() =>
|
|
new Promise<void>((resolve) => {
|
|
releaseBackfill = resolve
|
|
})
|
|
)
|
|
const startIndexHeal = vi.fn().mockResolvedValue(null)
|
|
const scheduler = createCodexSessionMigrationScheduler({
|
|
isEligible: () => eligible,
|
|
isQuitting: () => false,
|
|
resolveSystemCodexHomePathOverride: () => '/custom/history',
|
|
startBackfill,
|
|
startIndexHeal
|
|
})
|
|
|
|
scheduler.requestRun()
|
|
scheduler.requestRun()
|
|
expect(startBackfill).toHaveBeenCalledOnce()
|
|
expect(startBackfill).toHaveBeenCalledWith(expect.any(Object), '/custom/history')
|
|
|
|
eligible = false
|
|
releaseBackfill?.()
|
|
await Promise.resolve()
|
|
await Promise.resolve()
|
|
expect(startIndexHeal).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('reruns after a stopping migration becomes eligible again', async () => {
|
|
let eligible = true
|
|
let releaseFirstBackfill: ((result: { stopped: boolean }) => void) | undefined
|
|
const startBackfill = vi
|
|
.fn()
|
|
.mockImplementationOnce(
|
|
(_options) =>
|
|
new Promise<{ stopped: boolean }>((resolve) => {
|
|
releaseFirstBackfill = resolve
|
|
})
|
|
)
|
|
.mockResolvedValueOnce({ stopped: false })
|
|
const startIndexHeal = vi.fn().mockResolvedValue(null)
|
|
const scheduler = createCodexSessionMigrationScheduler({
|
|
isEligible: () => eligible,
|
|
isQuitting: () => false,
|
|
resolveSystemCodexHomePathOverride: () => undefined,
|
|
startBackfill,
|
|
startIndexHeal
|
|
})
|
|
|
|
scheduler.requestRun()
|
|
const firstRunOptions = startBackfill.mock.calls[0]?.[0]
|
|
eligible = false
|
|
expect(firstRunOptions?.shouldStop()).toBe(true)
|
|
eligible = true
|
|
scheduler.requestRun()
|
|
releaseFirstBackfill?.({ stopped: true })
|
|
|
|
await vi.waitFor(() => expect(startBackfill).toHaveBeenCalledTimes(2))
|
|
await vi.waitFor(() => expect(startIndexHeal).toHaveBeenCalledOnce())
|
|
})
|
|
})
|