/* 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('