Files
memind/page-data-workspace-ensure.test.mjs
T

76 lines
2.5 KiB
JavaScript

import assert from 'node:assert/strict';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import test from 'node:test';
import {
ensureRegisteredDatasetFromHtml,
inferInsertColumnsFromHtml,
} from './page-data-workspace-ensure.mjs';
import { evaluatePageDataFinishGuard } from './mindspace-page-data-finish-guard.mjs';
const HOMEWORK_HTML = `<!doctype html><html><head><title>作业</title></head><body>
<script src="/assets/page-data-client.js"></script>
<script>
MindSpacePageData.createClient({ apiBase: '/api' }).insertRow('homework_records', {
student_name: 'a',
record_date: '2026-07-12',
chinese: '已完成',
math: '已完成',
english: '已完成',
note: ''
});
</script></body></html>`;
test('inferInsertColumnsFromHtml parses insertRow object keys', () => {
const columns = inferInsertColumnsFromHtml(HOMEWORK_HTML, 'homework_records');
assert.deepEqual(columns, [
'student_name',
'record_date',
'chinese',
'math',
'english',
'note',
]);
});
test('ensureRegisteredDatasetFromHtml creates sqlite registry from html', async () => {
const workspaceRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'page-data-ensure-'));
try {
await ensureRegisteredDatasetFromHtml({
workspaceRoot,
html: HOMEWORK_HTML,
datasetName: 'homework_records',
});
const dbPath = path.join(workspaceRoot, '.mindspace', 'private-data.sqlite');
assert.ok(fs.existsSync(dbPath));
} finally {
fs.rmSync(workspaceRoot, { recursive: true, force: true });
}
});
test('evaluatePageDataFinishGuard detects unbound homework html even when user only confirms', () => {
const publishDir = fs.mkdtempSync(path.join(os.tmpdir(), 'page-data-guard-homework-'));
try {
fs.mkdirSync(path.join(publishDir, 'public'), { recursive: true });
fs.writeFileSync(path.join(publishDir, 'public', 'homework.html'), HOMEWORK_HTML, 'utf8');
const evaluation = evaluatePageDataFinishGuard({
publishDir,
agentText: '确认发布',
messages: [{
createdAt: Date.now(),
content: [{
type: 'toolRequest',
toolCall: { value: { name: 'write_file', arguments: { path: 'public/homework.html' } } },
}],
}],
});
assert.equal(evaluation.pageDataIntent, false);
assert.equal(evaluation.structuralPageData, true);
assert.equal(evaluation.unboundFiles.length, 1);
assert.equal(evaluation.needsRepair, true);
} finally {
fs.rmSync(publishDir, { recursive: true, force: true });
}
});