60 lines
2.3 KiB
TypeScript
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);
|
|
});
|
|
});
|