import fs from 'node:fs/promises'; import assert from 'node:assert/strict'; const source = await fs.readFile('scripts/supplier-evaluation-check.mjs', 'utf8'); const common = source.slice(source.indexOf('const base ='), source.indexOf('const author =')); const code = common + ` const viewer = client(); await viewer.enter('admin'); const dashboard = await viewer.request('/dashboard'); if (dashboard.page?.props.context?.enforced) { if (dashboard.page.props.context.available.includes('people.third_party')) { await viewer.request('/contexto', 'POST', {area:'people', option:'people.third_party'}); const pending = await viewer.request('/pessoas/relatorios'); assert.equal(pending.status,302); assert.ok(pending.location.endsWith('/dashboard')); } const result = await viewer.request('/contexto', 'POST', {area:'people', option:'people.internal'}); assert.ok([302,303].includes(result.status)); } const result = await viewer.request('/pessoas/relatorios'); assert.equal(result.status,200); assert.equal(result.page.component,'people/reports'); assert.ok(Array.isArray(result.page.props.summary)); const applications = await viewer.request('/pessoas/relatorios?view=applications'); assert.equal(applications.status,200); assert.ok(applications.page.props.applicationMetrics !== undefined); const applicationsCsv = await viewer.request('/pessoas/relatorios.csv?view=applications','GET',undefined,false); assert.equal(applicationsCsv.status,200); assert.ok(applicationsCsv.text.includes('Registadas para avaliação')); const selections = await viewer.request('/pessoas/relatorios?view=selections'); assert.equal(selections.status,200); assert.ok(selections.page.props.selectionMetrics !== undefined); const selectionsCsv = await viewer.request('/pessoas/relatorios.csv?view=selections','GET',undefined,false); assert.equal(selectionsCsv.status,200); assert.ok(selectionsCsv.text.includes('Situação da selecção')); const deadlines = await viewer.request('/pessoas/relatorios?view=deadlines'); assert.equal(deadlines.status,200); assert.ok(Array.isArray(deadlines.page.props.deadlineReport.items)); const deadlinesCsv = await viewer.request('/pessoas/relatorios.csv?view=deadlines','GET',undefined,false); assert.equal(deadlinesCsv.status,200); assert.ok(deadlinesCsv.text.includes('Dias de atraso')); for (const window of ['overdue','today','future','undated']) { const filtered = await viewer.request('/pessoas/relatorios?view=deadlines&deadline_window='+window); assert.equal(filtered.status,200); assert.equal(filtered.page.props.deadlineReport.window,window); assert.ok(filtered.page.props.deadlineReport.pagination); } const csv = await viewer.request('/pessoas/relatorios.csv','GET',undefined,false); assert.equal(csv.status,200); assert.ok(csv.text.includes('Referência')); await fs.writeFile('docs/proofs/people-reports-http.json',JSON.stringify({ checked_at:new Date().toISOString(), environment:base, pages:[{path:'/pessoas/relatorios',status:result.status},{path:'/pessoas/relatorios.csv',status:csv.status}, {path:'/pessoas/relatorios?view=applications',status:applications.status},{path:'/pessoas/relatorios.csv?view=applications',status:applicationsCsv.status}, {path:'/pessoas/relatorios?view=selections',status:selections.status},{path:'/pessoas/relatorios.csv?view=selections',status:selectionsCsv.status}, {path:'/pessoas/relatorios?view=deadlines',status:deadlines.status},{path:'/pessoas/relatorios.csv?view=deadlines',status:deadlinesCsv.status}], business_commands:false, accounts_or_grants_changed:false, visual_browser_review:false },null,2)); console.log('People report and CSV verified in local evaluation.'); `; await new Function('fs', 'assert', 'return (async()=>{'+code+'})()')(fs, assert);