const { chromium, } = require('C:/Users/macbook/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const directory = path.resolve( __dirname, '../storage/app/private/investmoz-v2', ); const plan = JSON.parse( fs.readFileSync( path.join( directory, 'qa-traceability-browser/territory-activation-plan.json', ), 'utf8', ), ); assert.match(plan.target.database, /^desk_restore_\d{8}_\d{6}_test$/); assert.equal(plan.target.port, 55441); const base = 'http://127.0.0.1:18093'; (async () => { const browser = await chromium.launch({ headless: true, executablePath: 'C:/Users/macbook/AppData/Local/ms-playwright/chromium-1243/chrome-win64/chrome.exe', }); try { const context = await browser.newContext({ viewport: { width: 1440, height: 950 }, }); await context.route('**/*', (route) => route.request().url().startsWith(base) ? route.continue() : route.abort(), ); const page = await context.newPage(); const errors = []; const writes = []; page.on('pageerror', (error) => errors.push(error.message)); page.on('request', (request) => { if (request.method() === 'POST') writes.push(new URL(request.url()).pathname); }); const response = await page.goto(base + '/login'); assert.equal( response.headers()['x-investmoz-qa-target'], plan.target.database + ':55441', ); await page .locator('input[name=email]') .fill('territory-browser@example.invalid'); await page.locator('input[name=password]').fill('Territory-QA-2026!'); await page.getByRole('button', { name: 'Log in', exact: true }).click(); await page.waitForURL((url) => url.pathname !== '/login'); await page.goto(base + '/management/relationship-repair'); const apply = page.getByRole('button', { name: 'Aplicar rastreabilidade territorial V2', exact: true, }); await apply.waitFor(); assert.equal(await apply.isEnabled(), true); assert.match( await page.locator('body').innerText(), /112 associações\/fontes/, ); assert.match( await page.locator('body').innerText(), /13 atualizações de referências/, ); await page.screenshot({ path: path.join(directory, 'territory-activation-preview.png'), }); const post = page.waitForResponse( (response) => response.request().method() === 'POST' && response.url().endsWith('/management/relationship-repair'), ); await apply.click(); assert.equal((await post).status(), 302); const revert = page.getByRole('button', { name: 'Reverter este incremento de rastreabilidade', exact: true, }); try { await revert.waitFor({ timeout: 8000 }); } catch (error) { fs.writeFileSync( path.join(directory, 'territory-browser-failure.txt'), await page.locator('body').innerText(), ); throw error; } assert.match( await page.locator('body').innerText(), /Rastreabilidade aplicada; validações e dados territoriais preservados/, ); await page.reload(); await page .getByRole('button', { name: 'Reverter este incremento de rastreabilidade', exact: true, }) .waitFor(); const row = plan.rows.find( (row) => row.kind === 'economic_clusters' && row.dossier_id && row.association_id, ); await page.goto(base + '/carteira/' + row.dossier_id); await page .getByRole('heading', { name: 'Fundamento documental das associações', exact: true, }) .waitFor(); assert.match( await page.locator('body').innerText(), /citação recuperada; ponte ao exemplar oficial por recuperar/, ); await page.goto(base + '/management/relationship-repair'); assert.equal( await page .getByRole('button', { name: 'Reverter este incremento de rastreabilidade', exact: true, }) .isEnabled(), false, ); await page .getByLabel('Motivo da reversão') .fill('Ensaio consciente de reversão no navegador QA.'); await page .getByLabel('Confirmo que pretendo reverter este incremento') .check(); const reversal = page.waitForResponse( (response) => response.request().method() === 'POST' && response.url().endsWith('/management/relationship-repair'), ); await page .getByRole('button', { name: 'Reverter este incremento de rastreabilidade', exact: true, }) .click(); assert.equal((await reversal).status(), 302); await page .getByRole('button', { name: 'Aplicar rastreabilidade territorial V2', exact: true, }) .waitFor(); assert.match( await page.locator('body').innerText(), /Rastreabilidade revertida, histórico preservado/, ); assert.deepEqual(errors, []); assert.deepEqual( writes.filter((path) => path !== '/login'), [ '/management/relationship-repair', '/management/relationship-repair', ], ); const evidence = { recorded_at: new Date().toISOString(), target: plan.target, checks: [ 'authenticated preview', 'apply exact V2 button', 'HTTP 302 and visible success', 'recovery after reload', 'source per association on public dossier', 'revert exact increment', 'no console errors', ], writes, active_writes: 0, }; fs.writeFileSync( path.join(directory, 'territory-activation-browser.json'), JSON.stringify(evidence, null, 2), ); console.log(JSON.stringify(evidence)); } finally { await browser.close(); } })().catch((error) => { console.error(error); process.exitCode = 1; });