Files
AetherForge/server/web/src/help/forgeMissionWizard.test.ts

60 lines
2.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import {
MISSION_WIZARD_STEPS,
MISSION_OPERATION_CHIPS,
canAdvanceWizardStep,
missionChipForMode,
nextWizardStep,
operationModeForChip,
prevWizardStep,
wizardPillStatus,
wizardStepIndex,
} from './forgeMissionWizard';
describe('forgeMissionWizard', () => {
it('defines three ritual wizard steps', () => {
expect(MISSION_WIZARD_STEPS).toEqual(['mode', 'profile', 'launch']);
expect(MISSION_OPERATION_CHIPS.map((c) => c.label)).toEqual(['Ghost', 'Loud', 'Spread', 'AV-Safe']);
});
it('maps operation chips to forge modes', () => {
expect(operationModeForChip('ghost')).toBe('ghost_walk');
expect(operationModeForChip('loud')).toBe('open_flame');
expect(operationModeForChip('spread')).toBe('wildfire');
expect(operationModeForChip('avsafe')).toBe('av_safe');
});
it('reverse-maps operation modes to wizard chips', () => {
expect(missionChipForMode('ghost_walk')).toBe('ghost');
expect(missionChipForMode('sigil_mask')).toBe('ghost');
expect(missionChipForMode('open_flame')).toBe('loud');
expect(missionChipForMode('wildfire')).toBe('spread');
expect(missionChipForMode('crucible_storm')).toBe('spread');
expect(missionChipForMode('av_safe')).toBe('avsafe');
});
it('navigates wizard steps forward and back', () => {
expect(nextWizardStep('mode')).toBe('profile');
expect(nextWizardStep('profile')).toBe('launch');
expect(nextWizardStep('launch')).toBeNull();
expect(prevWizardStep('launch')).toBe('profile');
expect(prevWizardStep('profile')).toBe('mode');
expect(prevWizardStep('mode')).toBeNull();
});
it('allows advancing from mode and profile steps', () => {
expect(canAdvanceWizardStep('mode', 'ghost', '')).toBe(true);
expect(canAdvanceWizardStep('profile', 'spread', '')).toBe(true);
expect(canAdvanceWizardStep('profile', 'spread', 'lan_kindling')).toBe(true);
expect(canAdvanceWizardStep('launch', 'ghost', '')).toBe(false);
});
it('tracks wizard pill status for step pills', () => {
expect(wizardPillStatus('mode', 'mode')).toBe('active');
expect(wizardPillStatus('mode', 'profile')).toBe('done');
expect(wizardPillStatus('profile', 'mode')).toBe('pending');
expect(wizardPillStatus('launch', 'launch')).toBe('active');
expect(wizardStepIndex('launch')).toBe(2);
});
});