Files
feedBack/tests/js/highway_phrases.test.js
T
2026-06-16 18:47:13 +02:00

50 lines
1.9 KiB
JavaScript

// Source-level tests for highway.getPhrases() and getMastery() public API getters.
// The createHighway closure is too heavy for a Node sandbox, so tests inspect
// source text to lock in correct wiring — same pattern as highway_filtered_notes.test.js.
const { test } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const highwayJs = path.join(__dirname, '..', '..', 'static', 'highway.js');
test('highway public API exposes getPhrases', () => {
const src = fs.readFileSync(highwayJs, 'utf8');
assert.match(
src,
/getPhrases\s*\(\s*\)\s*\{[^}]*_phrases/,
'getPhrases must reference _phrases',
);
});
test('getPhrases returns null when _phrases is falsy or empty', () => {
const src = fs.readFileSync(highwayJs, 'utf8');
assert.match(
src,
/getPhrases\s*\(\s*\)\s*\{[^}]*!\s*_phrases[^}]*return null/,
'getPhrases must return null when no phrase data is available',
);
});
test('getPhrases maps phrases to index, start_time, end_time, max_difficulty', () => {
const src = fs.readFileSync(highwayJs, 'utf8');
// Match all four fields within a reasonable window after getPhrases
const match = src.match(/getPhrases\s*\(\s*\)([\s\S]{0,400})/);
assert.ok(match, 'getPhrases not found in highway.js');
const block = match[1];
assert.ok(block.includes('start_time'), 'getPhrases must expose start_time');
assert.ok(block.includes('end_time'), 'getPhrases must expose end_time');
assert.ok(block.includes('max_difficulty'), 'getPhrases must expose max_difficulty');
assert.ok(block.includes('index'), 'getPhrases must expose index');
});
test('highway public API exposes getMastery', () => {
const src = fs.readFileSync(highwayJs, 'utf8');
assert.match(
src,
/getMastery\s*\(\s*\)\s*\{[^}]*_mastery/,
'getMastery must reference _mastery',
);
});