Files
gmtool/tests/core/scenario.test.js
T

27 lines
1.1 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { validateScenario } from '../../src/core/scenario.js';
import afterimage from '../../src/scenarios/afterimage.js';
import { getRulePack } from '../../src/dice/rulepacks/index.js';
describe('scenario validation', () => {
it('flags missing required fields', () => {
expect(validateScenario(null)).toContain('scenario must be an object');
const errs = validateScenario({ meta: {}, timeline: [] });
expect(errs).toContain('meta.id required');
expect(errs).toContain('meta.system required');
expect(errs).toContain('timeline must be a non-empty array');
});
it('flags a beat missing targetMin', () => {
const errs = validateScenario({ meta: { id: 'x', system: 'year-zero' }, timeline: [{ id: 'a' }] });
expect(errs).toContain('timeline[0].targetMin must be a number');
});
it('accepts the AFTERIMAGE pilot and its system resolves', () => {
expect(validateScenario(afterimage)).toEqual([]);
expect(afterimage.meta.system).toBe('year-zero');
expect(getRulePack(afterimage.meta.system)).not.toBe(null);
expect(afterimage.timeline.length).toBeGreaterThan(3);
});
});