37 lines
1.7 KiB
JavaScript
37 lines
1.7 KiB
JavaScript
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
|
|
function read(relativePath) {
|
|
return fs.readFileSync(path.join(__dirname, '..', relativePath), 'utf8');
|
|
}
|
|
|
|
const frontend = read('public/js/learningHub.js');
|
|
const learningAI = read('src/routes/learningAI.js');
|
|
const learningAdmin = read('src/routes/learningAdmin.js');
|
|
|
|
test('Learning AI prompts request category_name using existing categories', () => {
|
|
assert.match(learningAI, /function buildCategoryInstruction\(existingCategories\)/);
|
|
assert.match(learningAI, /SELECT name FROM learning_categories ORDER BY sort_order ASC, name ASC/);
|
|
assert.match(learningAI, /"category_name": "string \(best existing category name/);
|
|
assert.match(learningAI, /Prefer an existing category_name when it fits/);
|
|
});
|
|
|
|
test('Learning AI presentation JSON preserves generated category_name', () => {
|
|
assert.match(learningAI, /category_name: parsedPres\.category_name \|\| ''/);
|
|
});
|
|
|
|
test('Learning Hub applies AI-generated category names to the editor', () => {
|
|
assert.match(frontend, /return applyAiContent\(payload, contentType\)\.then/);
|
|
assert.match(frontend, /function applyAiCategory\(categoryName\)/);
|
|
assert.match(frontend, /sendJson\('\/api\/admin\/learning\/categories', 'POST', \{ name: categoryName \}\)/);
|
|
assert.match(frontend, /findCategoryOption\(sel, categoryName\)/);
|
|
assert.match(frontend, /cms\.loadCategories\(String\(data\.id\)\)/);
|
|
assert.match(frontend, /loadCategories\(\);/);
|
|
});
|
|
|
|
test('Learning category creation is idempotent by name', () => {
|
|
assert.match(learningAdmin, /WHERE LOWER\(name\) = LOWER\(\?\)/);
|
|
assert.match(learningAdmin, /existing: true/);
|
|
});
|