82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
getOpenCodeMixedProviderProvisioningError,
|
|
shouldWarnOnMissingRegisteredMember,
|
|
shouldWarnOnUnreadableMemberAuditConfig,
|
|
} from '@main/services/team/TeamProvisioningService';
|
|
|
|
describe('TeamProvisioningService audit warning policy', () => {
|
|
it('suppresses unreadable config warnings during the short post-accept grace window', () => {
|
|
const nowMs = Date.parse('2026-04-09T12:01:00.000Z');
|
|
const memberSpawnStatuses = new Map([
|
|
[
|
|
'alice',
|
|
{
|
|
agentToolAccepted: true,
|
|
firstSpawnAcceptedAt: '2026-04-09T12:00:30.000Z',
|
|
},
|
|
],
|
|
]);
|
|
|
|
expect(
|
|
shouldWarnOnUnreadableMemberAuditConfig({
|
|
nowMs,
|
|
lastWarnAt: 0,
|
|
expectedMembers: ['alice'],
|
|
memberSpawnStatuses,
|
|
})
|
|
).toBe(false);
|
|
});
|
|
|
|
it('warns on unreadable config only after a teammate has exceeded the launch grace window', () => {
|
|
const nowMs = Date.parse('2026-04-09T12:02:00.000Z');
|
|
const memberSpawnStatuses = new Map([
|
|
[
|
|
'alice',
|
|
{
|
|
agentToolAccepted: true,
|
|
firstSpawnAcceptedAt: '2026-04-09T12:00:00.000Z',
|
|
},
|
|
],
|
|
]);
|
|
|
|
expect(
|
|
shouldWarnOnUnreadableMemberAuditConfig({
|
|
nowMs,
|
|
lastWarnAt: 0,
|
|
expectedMembers: ['alice'],
|
|
memberSpawnStatuses,
|
|
})
|
|
).toBe(true);
|
|
});
|
|
|
|
it('only warns about missing registered members after grace expiry', () => {
|
|
const nowMs = Date.parse('2026-04-09T12:02:00.000Z');
|
|
|
|
expect(
|
|
shouldWarnOnMissingRegisteredMember({
|
|
nowMs,
|
|
lastWarnAt: 0,
|
|
graceExpired: false,
|
|
})
|
|
).toBe(false);
|
|
|
|
expect(
|
|
shouldWarnOnMissingRegisteredMember({
|
|
nowMs,
|
|
lastWarnAt: 0,
|
|
graceExpired: true,
|
|
})
|
|
).toBe(true);
|
|
});
|
|
|
|
it('surfaces a specific error for mixed-provider teams that include OpenCode', () => {
|
|
expect(getOpenCodeMixedProviderProvisioningError()).toContain(
|
|
'outside the current support scope'
|
|
);
|
|
expect(getOpenCodeMixedProviderProvisioningError()).toContain(
|
|
'OpenCode-led mixed teams still remain blocked in this phase'
|
|
);
|
|
});
|
|
});
|