148 lines
5.2 KiB
JavaScript
148 lines
5.2 KiB
JavaScript
const {
|
|
chromium,
|
|
} = require('C:/Users/macbook/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright');
|
|
const fs = require('node:fs');
|
|
const assert = require('node:assert/strict');
|
|
const base = 'http://127.0.0.1:18087';
|
|
(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();
|
|
await context.route('**/*', (route) =>
|
|
route.request().url().startsWith(base)
|
|
? route.continue()
|
|
: route.abort(),
|
|
);
|
|
const page = await context.newPage();
|
|
const errors = [];
|
|
page.on('pageerror', (error) => errors.push(error.message));
|
|
await page.goto(base + '/login');
|
|
await page
|
|
.locator('input[type=email]')
|
|
.fill('relationship-qa@example.invalid');
|
|
await page
|
|
.locator('input[type=password]')
|
|
.fill('QA-Relationship-2026!');
|
|
await page.locator('button[type=submit]').click();
|
|
await page.waitForURL((url) => !url.pathname.startsWith('/login'));
|
|
const response = await page.goto(
|
|
base + '/management/relationship-repair',
|
|
{ waitUntil: 'networkidle' },
|
|
);
|
|
assert.equal(
|
|
response.headers()['x-investmoz-qa-target'],
|
|
'anchor_restore_20261007_test:55441',
|
|
);
|
|
await page
|
|
.getByRole('heading', { name: 'Fundamentadas: 2', exact: true })
|
|
.waitFor();
|
|
await page
|
|
.getByRole('heading', { name: 'Pendentes: 1', exact: true })
|
|
.waitFor();
|
|
await page
|
|
.getByRole('heading', { name: 'Contraditórias: 1', exact: true })
|
|
.waitFor();
|
|
const grounded = page.getByRole('region', {
|
|
name: 'Associações fundamentadas',
|
|
});
|
|
for (const text of [
|
|
'Localização atual',
|
|
'Localização proposta',
|
|
'Documento de origem',
|
|
'Motivo',
|
|
'Sem coordenadas',
|
|
])
|
|
assert((await grounded.innerText()).includes(text));
|
|
await grounded
|
|
.getByRole('button', {
|
|
name: 'Aplicar esta associação',
|
|
exact: true,
|
|
})
|
|
.first()
|
|
.click();
|
|
await grounded
|
|
.getByRole('button', { name: 'Associação aplicada', exact: true })
|
|
.waitFor();
|
|
assert.equal(
|
|
await grounded
|
|
.getByRole('button', {
|
|
name: 'Aplicar esta associação',
|
|
exact: true,
|
|
})
|
|
.count(),
|
|
1,
|
|
);
|
|
await grounded
|
|
.getByRole('button', {
|
|
name: 'Aplicar esta associação',
|
|
exact: true,
|
|
})
|
|
.click();
|
|
await page.waitForFunction(
|
|
() =>
|
|
document.querySelectorAll('[data-row-id] button').length ===
|
|
4 &&
|
|
[...document.querySelectorAll('[data-row-id] button')].filter(
|
|
(button) => button.textContent === 'Associação aplicada',
|
|
).length === 2,
|
|
);
|
|
assert(
|
|
await page
|
|
.getByRole('region', { name: 'Associações pendentes' })
|
|
.getByRole('button')
|
|
.isDisabled(),
|
|
);
|
|
assert(
|
|
await page
|
|
.getByRole('region', { name: 'Associações contraditórias' })
|
|
.getByRole('button')
|
|
.isDisabled(),
|
|
);
|
|
assert((await page.locator('body').innerText()).includes('Autor:'));
|
|
assert((await page.locator('body').innerText()).includes('Data:'));
|
|
for (const width of [1440, 390]) {
|
|
await page.setViewportSize({ width, height: 1000 });
|
|
assert(
|
|
await page.evaluate(
|
|
() => document.documentElement.scrollWidth <= innerWidth,
|
|
),
|
|
);
|
|
await page.screenshot({
|
|
path: `docs/investmoz/relationships/territorial-${width}.png`,
|
|
fullPage: true,
|
|
});
|
|
}
|
|
assert.deepEqual(errors, []);
|
|
fs.writeFileSync(
|
|
'docs/investmoz/relationships/territorial-browser-qa.json',
|
|
JSON.stringify(
|
|
{
|
|
target: 'anchor_restore_20261007_test:55441',
|
|
passed: true,
|
|
individualApplications: 2,
|
|
pendingRetained: 1,
|
|
contradictoryRetained: 1,
|
|
noCoordinatesAccepted: true,
|
|
auditAuthorDateSource: true,
|
|
viewports: [1440, 390],
|
|
errors,
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
console.log(
|
|
'QA territorial browser passed: two individual applications, conflicts retained, author/date/source, desktop/mobile.',
|
|
);
|
|
} finally {
|
|
await browser.close();
|
|
}
|
|
})().catch((error) => {
|
|
console.error(error);
|
|
process.exitCode = 1;
|
|
});
|