Files
compras/scripts/people-reports-check.mjs
T
2026-11-02 08:08:05 +02:00

61 lines
3.7 KiB
JavaScript

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);