Files
Investidor-V2/tools/territorial-traceability-browser.cjs

196 lines
6.8 KiB
JavaScript

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