Files
gridpilot.gg/tests/unit/application/services/OverlaySyncService.timeout.test.ts

36 lines
1.4 KiB
TypeScript

import { describe, expect, test } from 'vitest'
import { OverlayAction } from '../../../../packages/application/ports/IOverlaySyncPort'
import { IAutomationLifecycleEmitter, LifecycleCallback } from '../../../../packages/infrastructure/adapters/IAutomationLifecycleEmitter'
import { OverlaySyncService } from '../../../../packages/application/services/OverlaySyncService'
class MockLifecycleEmitter implements IAutomationLifecycleEmitter {
private callbacks: Set<LifecycleCallback> = new Set()
onLifecycle(cb: LifecycleCallback): void {
this.callbacks.add(cb)
}
offLifecycle(cb: LifecycleCallback): void {
this.callbacks.delete(cb)
}
async emit(event: any) {
for (const cb of Array.from(this.callbacks)) {
cb(event)
}
}
}
describe('OverlaySyncService timeout (unit)', () => {
test('startAction with short timeout resolves as tentative when no events', async () => {
const emitter = new MockLifecycleEmitter()
const svc = new OverlaySyncService({ lifecycleEmitter: emitter as any, logger: console as any, publisher: { publish: async () => {} } as any })
const action: OverlayAction = { id: 'add-car', label: 'Adding...', timeoutMs: 50 }
const start = Date.now()
const ack = await svc.startAction(action)
const elapsed = Date.now() - start
expect(ack.status).toBe('tentative')
expect(ack.id).toBe('add-car')
expect(elapsed).toBeGreaterThanOrEqual(40)
})
})