// @requirements REQ-PRODUCT-EMBEDS REQ-EU-DEVICE REQ-PRODUCT-CONSENT-RUNTIME REQ-PRODUCT-SAFE-CONTENT import {test} from 'node:test'; import assert from 'node:assert/strict'; import {JSDOM,ResourceLoader} from 'jsdom'; import {createConsent,createEmbedService,renderEmbedPlaceholder,toPublicConfig,validateSiteConfig} from 'notabenda'; import {compileLegalDocuments,createConsentNotice} from 'notabenda/content'; import {recordLegalRelease,registerConsentNotice,setActiveConsentNotice,recordConsentChoice,getConsentHead} from 'notabenda-cf'; import {createSyntheticStorage} from '../../notabenda-cf/examples/synthetic.mjs'; import {fixture} from './helpers.mjs'; const instant='2026-10-18T12:00:00.000Z'; const tick=()=>new Promise(resolve=>setImmediate(resolve)); const frame={kind:'iframe',src:'/fictional-frame',title:'Fictional map',description:'Optional map from the declared fictional provider.'}; const image={kind:'image',src:'https://media.example.test/image.png',title:'Fictional illustration',alt:'A fictional blue landscape',description:'Optional image from the same declared service.'}; async function setup(){ const config=await fixture({reviewed:true}); config.purposes=[config.purposes[0],{...structuredClone(config.purposes[0]),id:'media',name:'Embedded media'}]; config.services=[{id:'optional-media',name:'Fictional media',provider:'Fictional provider',location:'Test only',purposeIds:config.purposes.map(p=>p.id),resourceOrigins:['self','https://media.example.test']}];config.storage=[]; config.consent={purposes:config.purposes.map(p=>({id:p.id,scope:'one'})),services:[{id:'optional-media',scope:'one'}],grantLifetimeDays:1,refusalLifetimeDays:180,dismissalMinutes:30}; const values=new Map();let clock=Date.parse(instant);let notify;let timer; const env={storage:{getItem:key=>values.get(key)??null,setItem:(key,value)=>values.set(key,value),removeItem:key=>values.delete(key)},now:()=>clock,schedule:callback=>{timer=callback;return ()=>{};},subscribe:(_key,callback)=>{notify=callback;return ()=>{};}}; const requests=[];class Loader extends ResourceLoader{fetch(url){requests.push(url);return null;}} const dom=new JSDOM('
',{url:'https://app.example.test/',resources:new Loader()}); return {config,env,values,dom,requests,get a(){return dom.window.document.querySelector('#a');},get b(){return dom.window.document.querySelector('#b');},get c(){return dom.window.document.querySelector('#c');},advance(){clock+=86400001;timer?.();},notify(){notify?.();}}; } test('SSR placeholders are inert and escaped, and media declarations join public inventory and consent scope',async()=>{ const html=renderEmbedPlaceholder({title:'A