68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
import { CompositeMemberWorkSyncBusySignal } from '@features/member-work-sync/main/infrastructure/CompositeMemberWorkSyncBusySignal';
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
describe('CompositeMemberWorkSyncBusySignal', () => {
|
|
it('does not block nudges forever when one busy signal fails', async () => {
|
|
const logger = { debug: vi.fn(), error: vi.fn(), warn: vi.fn() };
|
|
const signal = new CompositeMemberWorkSyncBusySignal(
|
|
[
|
|
{
|
|
isBusy: vi.fn(async () => {
|
|
throw new Error('delivery status unavailable');
|
|
}),
|
|
},
|
|
{
|
|
isBusy: vi.fn(async () => ({ busy: false })),
|
|
},
|
|
],
|
|
logger
|
|
);
|
|
|
|
await expect(
|
|
signal.isBusy({
|
|
teamName: 'team-a',
|
|
memberName: 'bob',
|
|
nowIso: '2026-04-29T00:00:00.000Z',
|
|
workSyncIntent: 'agenda_sync',
|
|
taskRefs: [{ teamName: 'team-a', taskId: 'task-1', displayId: '11111111' }],
|
|
})
|
|
).resolves.toEqual({ busy: false });
|
|
expect(logger.warn).toHaveBeenCalledWith(
|
|
'member work sync busy signal failed',
|
|
expect.objectContaining({
|
|
teamName: 'team-a',
|
|
memberName: 'bob',
|
|
error: 'Error: delivery status unavailable',
|
|
})
|
|
);
|
|
});
|
|
|
|
it('still stops at the first positive busy signal', async () => {
|
|
const secondSignal = vi.fn(async () => ({ busy: false }));
|
|
const signal = new CompositeMemberWorkSyncBusySignal([
|
|
{
|
|
isBusy: vi.fn(async () => ({
|
|
busy: true,
|
|
reason: 'active_tool_activity',
|
|
retryAfterIso: '2026-04-29T00:01:00.000Z',
|
|
})),
|
|
},
|
|
{ isBusy: secondSignal },
|
|
]);
|
|
|
|
await expect(
|
|
signal.isBusy({
|
|
teamName: 'team-a',
|
|
memberName: 'bob',
|
|
nowIso: '2026-04-29T00:00:00.000Z',
|
|
workSyncIntent: 'agenda_sync',
|
|
taskRefs: [{ teamName: 'team-a', taskId: 'task-1', displayId: '11111111' }],
|
|
})
|
|
).resolves.toEqual({
|
|
busy: true,
|
|
reason: 'active_tool_activity',
|
|
retryAfterIso: '2026-04-29T00:01:00.000Z',
|
|
});
|
|
expect(secondSignal).not.toHaveBeenCalled();
|
|
});
|
|
});
|