Files
openmaic/OpenMAIC/packages/@openmaic/generation/test/procedural-skill-content-gates.test.ts
2026-08-16 14:58:47 +08:00

48 lines
1.9 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import { applyOutlineFallbacks } from '@openmaic/generation';
import type { SceneOutline } from '@openmaic/generation';
describe('procedural-skill content gates', () => {
test('applyOutlineFallbacks strips procedural-skill when vocational mode is not active', () => {
const outline = createProceduralSkillOutline();
const safeOutline = applyOutlineFallbacks(outline, true);
expect(safeOutline.widgetType).toBe('diagram');
expect(safeOutline.widgetOutline?.procedureType).toBeUndefined();
expect(safeOutline.widgetOutline?.task).toBeUndefined();
expect(safeOutline.widgetOutline?.errorConsequences).toBeUndefined();
});
test('applyOutlineFallbacks retains procedural-skill only when explicitly allowed', () => {
const outline = createProceduralSkillOutline();
const safeOutline = applyOutlineFallbacks(outline, true, { allowProceduralSkill: true });
expect(safeOutline.widgetType).toBe('procedural-skill');
expect(safeOutline.widgetOutline?.errorConsequences).toEqual([
'Unsafe readings require stopping and rechecking',
]);
});
});
function createProceduralSkillOutline(): SceneOutline {
return {
id: 'scene-procedural-skill',
type: 'interactive',
title: 'Device Calibration Practice',
description: 'Practice a generic calibration procedure with step feedback.',
keyPoints: ['Follow steps in order', 'Check each success criterion'],
order: 1,
widgetType: 'procedural-skill',
widgetOutline: {
concept: 'calibration procedure',
procedureType: 'operation',
task: 'Calibrate a training device',
tools: ['multimeter', 'checklist'],
steps: ['Inspect the device', 'Connect the tool', 'Confirm the reading'],
successCriteria: ['No visible damage', 'Reading is within range'],
errorConsequences: ['Unsafe readings require stopping and rechecking'],
},
};
}