Files
dwroller/tests/rulesMidplaySimulation.test.js
Alex 7873f450da feat: rules midgame priority system, mission enhancements, and requisition shop improvements
- Add midgame priority ranking for rules (midgamePriority field)
- Enhance rules search to support midgame filtering and sorting
- Improve mission simulation and midgame tracking
- Fix RequisitionShop player name handling
- Add rules midplay simulation tests
- Update MissionTab with midgame scene tracking
- Add backend logging for rules updates
2026-06-24 12:09:25 +02:00

61 lines
1.9 KiB
JavaScript

const { execFileSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const repoRoot = path.resolve(__dirname, '..');
const rulesPath = path.join(repoRoot, 'database', 'rules', 'rules-database.json');
describe('mid-play rules database', () => {
const db = JSON.parse(fs.readFileSync(rulesPath, 'utf8'));
const rules = db.rules || [];
test('contains required live-play entries with provenance', () => {
const required = [
'Dodge',
'Parry',
'Full Auto Burst',
'Semi-Auto Burst',
'Suppressing Fire',
'Overwatch',
'Pinning',
'Righteous Fury',
'Critical Damage',
'Hordes',
'Cohesion Damage',
'Maintaining Squad Mode',
'Requisition',
'Renown',
'Fear'
];
for (const title of required) {
const rule = rules.find(r => r.title === title);
expect(rule).toBeTruthy();
expect(rule.sourceAbbr).toBeTruthy();
expect(rule.sourceMethod).toBeTruthy();
expect(Number(rule.confidence)).toBeGreaterThanOrEqual(0.7);
expect(Number(rule.midgamePriority)).toBeGreaterThanOrEqual(70);
}
});
test('uses the enriched schema needed by the UI', () => {
expect(db.metadata && db.metadata.builder).toBe('scripts/build-midgame-rules.py');
for (const rule of rules) {
expect(rule.rule_id || rule.id).toBeTruthy();
expect(rule.title).toBeTruthy();
expect(rule.summary).toBeDefined();
expect(Array.isArray(rule.tags)).toBe(true);
expect(Array.isArray(rule.aliases)).toBe(true);
expect(Array.isArray(rule.relatedRules)).toBe(true);
}
});
test('simulates GM and player lookups during play', () => {
const output = execFileSync('node', ['scripts/simulate-midplay-rules.js'], {
cwd: repoRoot,
encoding: 'utf8'
});
expect(output).toContain('All mid-play lookup scenarios passed.');
});
});