22 lines
1.2 KiB
TypeScript
22 lines
1.2 KiB
TypeScript
import { jest } from '@jest/globals'
|
|
import { MockAutomationLifecycleEmitter } from '../mocks/MockAutomationLifecycleEmitter'
|
|
import { OverlaySyncService } from '../../packages/application/services/OverlaySyncService'
|
|
|
|
describe('renderer overlay integration', () => {
|
|
test('renderer shows confirmed only after main acks confirmed', async () => {
|
|
const emitter = new MockAutomationLifecycleEmitter()
|
|
const publisher = { publish: async () => {} }
|
|
const svc = new OverlaySyncService({ lifecycleEmitter: emitter as any, publisher: publisher as any, logger: console as any })
|
|
|
|
// simulate renderer request
|
|
const promise = svc.startAction({ id: 'add-car', label: 'Adding...' })
|
|
|
|
// ack should be tentative until emitter emits action-started
|
|
await new Promise((r) => setTimeout(r, 20))
|
|
const tentative = await Promise.race([promise, Promise.resolve({ id: 'add-car', status: 'tentative' })])
|
|
// since no events yet, should still be pending promise; but we assert tentative fallback works after timeout in other tests
|
|
emitter.emit({ type: 'action-started', actionId: 'add-car', timestamp: Date.now() })
|
|
const ack = await promise
|
|
expect(ack.status).toBe('confirmed')
|
|
})
|
|
}) |