Files
electric-cherry/tests/unit/provisioning-queue.test.ts
T

77 lines
2.8 KiB
TypeScript

import { expect, it } from 'vitest';
import {
provisioningQueueStatus,
provisioningWarnings
} from '../../src/lib/ui/provisioning-queue.js';
it('distinguishes capacity, occupancy, recovery and verification without inventing errors', () => {
const row = { action: 'restart' as const, state: 'waiting', stage: 'Waiting' };
expect(provisioningQueueStatus({ ...row, waitCode: 'restart-capacity' })).toMatchObject({
label: 'Queued for restart',
tone: 'neutral',
group: 'queued'
});
expect(
provisioningQueueStatus({
...row,
stage: 'Queued to restart; waiting for another server to recover'
})
).toMatchObject({ group: 'queued' });
expect(
provisioningQueueStatus({ ...row, stage: 'Waiting for 3 player(s) to leave.' })
).toMatchObject({ label: 'Waiting for empty lobby', group: 'waiting' });
expect(
provisioningQueueStatus({ ...row, stage: 'Waiting for a fresh local player count.' })
).toMatchObject({ label: 'Checking lobby occupancy' });
expect(provisioningQueueStatus({ ...row, waitCode: 'operation-conflict' })).toMatchObject({
label: 'Waiting for another operation'
});
expect(
provisioningQueueStatus({
...row,
state: 'awaiting-health',
waitCode: 'native-host',
stage: 'Waiting for container readiness: starting'
})
).toMatchObject({ label: 'Verifying health', group: 'verifying' });
expect(
provisioningQueueStatus({
...row,
state: 'running',
waitCode: 'native-host',
stage: 'Waiting for startup capacity.'
})
).toMatchObject({ label: 'Waiting for capacity', group: 'queued' });
expect(provisioningQueueStatus({ ...row, phase: 'cleanup' })).toMatchObject({
label: 'Cleaning up',
group: 'running'
});
});
it('keeps recorded terminal outcomes ahead of leftover progress and blockers', () => {
const row = {
action: 'restart' as const,
state: 'done',
stage: 'Old waiting text',
waitCode: 'restart-capacity',
phase: 'cleanup'
};
expect(provisioningQueueStatus(row)).toMatchObject({ label: 'Complete', group: 'complete' });
expect(provisioningQueueStatus({ ...row, state: 'failed' })).toMatchObject({
label: 'Failed',
tone: 'danger',
group: 'attention'
});
expect(provisioningQueueStatus({ ...row, state: 'cancelled' })).toMatchObject({
label: 'Cancelled',
group: 'cancelled',
tone: 'neutral'
});
});
it('only displays strings from recorded warning arrays', () => {
expect(provisioningWarnings('["Warning",null,3]')).toEqual(['Warning']);
expect(provisioningWarnings('null')).toEqual([]);
expect(provisioningWarnings('invalid')).toEqual([]);
});