/* Node-only behavioral checks for the v1.8.3 frontend additions:
re3data supplementary list and nearest-subject disclosure styling.
Runs the actual embedded functions; not a substitute for a browser test. */
const fs = require('node:fs'), vm = require('node:vm'), assert = require('node:assert/strict'), path = require('node:path');
const html = fs.readFileSync(path.join(__dirname, '../ResearchBee_LibGuides.html'), 'utf8');
function segment(start, end) {
const i = html.indexOf(start);
assert.ok(i >= 0, `missing ${start}`);
return html.slice(i, html.indexOf(end, i));
}
const context = { console, URL, encodeURIComponent, rbText: x => x };
vm.createContext(context);
vm.runInContext(
segment('function safeHttpsUrl(', 'function makeExternalLink(') +
segment('function esc(str)', '// Evidence-backed links') +
segment('function rbTrustedAnchor(', 'function rbJournalTitle(') +
segment('function rbRe3dataSearchUrl(', 'function renderRepoResults('),
context);
let count = 0;
const check = fn => { fn(); count++; };
const render = sup => vm.runInContext(`rbRenderRe3dataSupplement(${JSON.stringify(sup)})`, context);
const ok = {
status: 'ok', query: 'materials science', recommended_view: 'collapsed',
message: '1 additional repository from re3data.org matched "materials science".',
repositories: [{
id: 'r3d100012345', name: 'Materials Data Facility', url: 'https://materialsdatafacility.org/',
re3data_url: 'https://www.re3data.org/repository/r3d100012345', description: 'desc ',
subjects: ['Materials Science'], persistent_identifier: 'DOI', data_upload: 'open', data_access: 'open',
versioning: 'Yes', certificates: [], countries: ['USA'],
review_notes: ['Listed in re3data.org; not reviewed by KU Library.'], source_note: 'Details as recorded by re3data.org.',
}],
};
check(() => { const out = render(ok); assert.ok(out.includes('')); assert.ok(!out.includes(' open>')); });
check(() => assert.ok(render({ ...ok, recommended_view: 'expanded' }).includes('')));
check(() => { const out = render(ok); assert.ok(!out.includes('