Files
Investidor-V2/tools/portal-functional-land-publication-qa.cjs
T
nala 287e991486
tests / ci (push) Waiting to run
oportunidades 7
2026-10-13 11:40:29 +02:00

17 lines
5.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Positive synthetic authorization branch; the real missing-authorization refusal remains separately proven.
const {start,assert,DIR,fs,path,sanitized}=require('./portal-functional-qa-lib.cjs');
void(async()=>{const q=await start('functional-land-publication-chromium-20261011'),sessions=new Map();let page,p;
q.proof.fixture='SIMULAÇÃO QA: nenhuma autoridade externa nem direito real é certificado';
q.proof.resource_id=q.prior.resource_id;q.proof.saved=q.prior.saved;
async function actor(role){if(!sessions.has(role)){const s=await q.context(role);sessions.set(role,s);await q.login(s.page,role);}page=sessions.get(role).page;}
async function open(edit=false){const r=await q.open(page,`/minhas-oportunidades/32/${edit?'edit':'view'}`);const html=await r.text(),a=html.match(/data-page="([^"]+)"/);p=JSON.parse(a&&a[1].startsWith('{')?a[1].replace(/&quot;/g,'"').replace(/&amp;/g,'&').replace(/&#039;/g,"'"):html.match(/<script[^>]*type="application\/json"[^>]*>([\s\S]*?)<\/script>/)[1]).props;assert.equal(r.status(),200);await page.waitForLoadState('networkidle');}
async function action(name){await open();const box=page.getByRole('region',{name:'Workflow interno'});await box.getByLabel('Fundamentação',{exact:true}).fill('SIMULAÇÃO QA identificada: ensaio de autorização documental fictícia, sem decisão externa real nem direito atribuído.');if(name==='review_gate'){await box.getByLabel(/^Revisão/).selectOption('competent_authority_clearance');await box.getByLabel(/^Decisão/).selectOption('approved');await box.getByLabel('SIMULAÇÃO QA — autorização externa fictícia',{exact:true}).check();}if(name==='publish')await box.getByLabel(/Confirmei a pré-visualização/).check();const pending=page.waitForResponse(r=>r.request().method()==='POST'&&new URL(r.url()).pathname==='/minhas-oportunidades/32/workflow');await box.getByRole('button',{name:{request_revision:'Preparar alteração material',submit:'Submeter para validação',start_review:'Iniciar validação',review_gate:'Guardar revisão especializada',approve:'Aprovar versão',publish:'Disponibilizar com acesso restrito'}[name],exact:true}).click();assert.equal((await pending).status(),200);await open();}
try{await actor('promoter');await open();if(!q.proof.saved){if(p.workflowState==='approved')await action('request_revision');assert.equal(p.workflowState,'needs_information');
if(!q.proof.resource_id){await q.open(page,'/minhas-oportunidades/32/resources');await page.waitForLoadState('networkidle');await page.getByRole('button',{name:'Documentos',exact:true}).click();await page.getByLabel('Título',{exact:true}).fill('SIMULAÇÃO QA — autorização externa fictícia');await page.getByLabel('Classificação documental',{exact:true}).selectOption('restricted');await page.getByLabel('Âmbito de consulta',{exact:true}).selectOption('internal');await page.locator('input[type="file"]').setInputFiles(path.join(DIR,'functional-land-synthetic-authorization-20261011.pdf'));await page.getByLabel('Motivo (20–1000 caracteres)',{exact:true}).fill('SIMULAÇÃO QA: evidência fictícia para ensaiar o ramo positivo; sem ato competente real ou fonte oficial atribuída.');const pending=page.waitForResponse(r=>r.request().method()==='POST'&&new URL(r.url()).pathname.endsWith('/resources/documents'));await page.getByRole('button',{name:'Guardar recurso',exact:true}).click();const r=await pending;assert.equal(r.status(),201);q.proof.resource_id=(await r.json()).id;q.save();}
await open(true);await page.getByLabel('SIMULAÇÃO QA — autorização externa fictícia',{exact:true}).check();await page.locator('[id="canonical.land_rights.required_authorizations.0.status"]').selectOption('approved');await page.locator('[id="canonical.land_rights.required_authorizations.0.document_id"]').selectOption(q.proof.resource_id);await page.locator('[id="canonical.land_rights.required_authorizations.0.condition"]').fill('SIMULAÇÃO QA, sem efeitos jurídicos: ramo positivo com documento fictício identificado.');await page.getByLabel('Motivo da alteração',{exact:true}).fill('SIMULAÇÃO QA: preservar a recusa anterior e ensaiar autorização fictícia documentada sem atribuir qualquer direito real.');const pending=page.waitForResponse(r=>r.request().method()==='PUT'&&new URL(r.url()).pathname==='/minhas-oportunidades/32/draft');await page.getByRole('button',{name:/Guardar rascunho/}).click();assert.equal((await pending).status(),200);q.proof.saved=true;q.save();}
await open();if(p.workflowState==='needs_information')await action('submit');q.proof.reopened=p.canonicalResponse.materiality.reopened;assert.deepEqual(p.canonicalResponse.materiality.reopened,['competent_authority_clearance']);q.save();
await actor('validator');await open();if(p.workflowState==='submitted')await action('start_review');if(p.workflowState==='in_review'){await action('review_gate');await action('approve');}
await actor('publisher');await open();if(p.workflowState==='approved')await action('publish');assert.equal(p.workflowState,'published');assert.equal(p.publicationState.public_catalog,false);assert.notEqual(p.profileContext.approval.actor_id,p.profileContext.publication.actor_id);await q.shot(page,'land-simulation-restricted-result',false);
await sessions.get('promoter').ctx.close();sessions.delete('promoter');await actor('promoter');await open();assert.equal(p.values.canonical.land_rights.required_authorizations[0].document_id,q.proof.resource_id);assert.equal(p.workflowState,'published');q.proof.recovered_new_session=true;q.proof.publication='restricted_QA_simulation';q.proof.result='passed';q.save();console.log(JSON.stringify({result:'passed',reopened:q.proof.reopened,publication:q.proof.publication,external_act_not_asserted:true,active_writes:0}));
}catch(e){q.proof.result='failed';q.proof.failure=sanitized(e);q.save();console.log(JSON.stringify({result:'failed',failure:q.proof.failure}));process.exitCode=1;}finally{for(const s of sessions.values())await s.ctx.close();await q.browser.close();}})();