import test from 'node:test';
import assert from 'node:assert/strict';
import {createRequire} from 'node:module';
const {createEvidenceViewer}=createRequire(import.meta.url)('../apps/server/public/evidence-viewer.js');
function fixture(){let principal={sub:'analyst',role:'analyst',permissions:['evidence.read']},timer;const requests=[],renders=[];const view=createEvidenceViewer({principal:()=>principal,request:path=>new Promise((resolve,reject)=>requests.push({path,resolve,reject})),render:(...args)=>renders.push(args),clear:()=>renders.push(['clear']),setTimer:(fn,ms)=>{assert.equal(ms,60000);timer=fn;return 1;},cancelTimer:()=>{timer=null;}});return {view,requests,renders,revoke:()=>{principal={...principal,permissions:[]};view.permissions();},identity:()=>{principal={...principal,sub:'other'};view.permissions();},expire:()=>timer()};}
const id='11111111-1111-4111-8111-111111111111';
async function open(f,incident='one'){const result=f.view.open(incident);f.requests.at(-1).resolve({evidence:[{id,availability:'available'}]});await result;}
test('metadata alone does not retrieve plaintext; purpose required',async()=>{const f=fixture();await open(f);assert.equal(f.requests.length,1);await f.view.reveal(id,'');assert.equal(f.requests.length,1);const reveal=f.view.reveal(id,'investigation');assert.match(f.requests.at(-1).path,/reason=investigation$/);f.requests.at(-1).resolve({id,type:'interaction',payload:{content:''}});await reveal;assert.equal(f.renders.at(-1)[0],'plaintext');assert.match(f.renders.at(-1)[1],/