17 lines
5.9 KiB
JavaScript
17 lines
5.9 KiB
JavaScript
// 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(/"/g,'"').replace(/&/g,'&').replace(/'/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();}})();
|