Files
Investidor-V2/tools/investment-relationships-browser.cjs
T
nala 1106509116
tests / ci (push) Canceled after 0s
vrsao 2
2026-10-08 14:02:01 +02:00

205 lines
7.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 dir = 'storage/app/private/anchor-project-reconciliation/';
const fixture = JSON.parse(fs.readFileSync(dir + 'qa-browser-fixture.json'));
const base = 'http://127.0.0.1:18086';
(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.request().url().startsWith('data:')
? route.continue()
: route.abort(),
);
const page = await context.newPage();
const errors = [];
page.on('pageerror', (e) => errors.push(e.message));
const response = await page.goto(
base + '/carteira/' + fixture.project_dossier,
{ waitUntil: 'networkidle' },
);
assert.equal(
response.headers()['x-investmoz-qa-target'],
fixture.target,
);
assert.equal(response.status(), 200);
await page
.getByRole('heading', {
name: 'Localização documentada do projecto',
exact: true,
})
.waitFor();
for (const text of [
'QA province',
'QA district',
'QA admin_post',
'QA locality',
'32.5',
])
assert(
(await page.locator('body').innerText()).includes(text),
text,
);
await page
.getByRole('link', {
name: 'Synthetic QA linked opportunity',
exact: true,
})
.click();
await page
.getByRole('link', {
name: 'Voltar ao dossier: Synthetic QA anchor 1',
exact: true,
})
.waitFor();
await page
.getByRole('link', {
name: 'Voltar ao dossier: Synthetic QA anchor 1',
exact: true,
})
.click();
await page
.getByRole('heading', {
name: 'Localização documentada do projecto',
exact: true,
})
.waitFor();
await page
.getByRole('link', {
name: 'Synthetic QA multi-site cluster',
exact: true,
})
.first()
.click();
const geography = page.locator(
`[aria-labelledby="documented-geography-${fixture.cluster_dossier}"]`,
);
await geography
.getByText('Não existe um ponto único atribuído ao cluster.', {
exact: false,
})
.waitFor();
assert(
(await geography.innerText()).includes(
'2 investimentos com coordenadas disponíveis.',
),
);
assert((await geography.innerText()).includes('QA production'));
assert((await geography.innerText()).includes('QA processing'));
assert.equal(
await geography.getByRole('link', { name: /QA-ANCHOR-/ }).count(),
2,
);
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/cluster-${width}.png`,
fullPage: true,
});
}
const map = await context.request.get(
base + '/api/v1/investment/map?province_id=' + fixture.province_id,
);
assert.equal(map.headers()['x-investmoz-qa-target'], fixture.target);
const data = await map.json();
assert.equal(data.matched_count, 1);
assert.equal(data.georeferenced_count, 1);
assert.equal(
data.features[0].properties.location_basis,
'linked_project_site',
);
const detail = await context.request.get(
base +
'/api/v1/investment/opportunities/' +
fixture.opportunity_slug,
);
assert(detail.ok());
const json = await detail.json();
assert.equal(json.context.projects.length, 1);
assert.equal(json.context.clusters.length, 1);
await page.goto(base + '/login', { waitUntil: 'networkidle' });
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'));
await page.goto(base + '/management/relationship-repair', {
waitUntil: 'networkidle',
});
await page
.getByRole('heading', { name: 'Localizações: 28', exact: true })
.waitFor();
await page
.getByRole('button', {
name: 'Aplicar associações fundamentadas',
exact: true,
})
.click();
await page
.getByText(
/Associações documentadas aplicadas\.|Este plano já foi aplicado; nenhum duplicado criado\./,
)
.waitFor();
await page
.getByRole('button', {
name: 'Aplicar associações fundamentadas',
exact: true,
})
.click();
await page
.getByText('Este plano já foi aplicado; nenhum duplicado criado.', {
exact: true,
})
.waitFor();
assert.deepEqual(errors, []);
fs.writeFileSync(
'docs/investmoz/relationships/browser-qa.json',
JSON.stringify(
{
target: fixture.target,
project: fixture.project_dossier,
cluster: fixture.cluster_dossier,
passed: true,
publicNavigation: true,
administrativeHierarchy: true,
clusterMemberSites: 2,
clusterSinglePoint: false,
territorialMap: true,
chainLinks: true,
authenticatedPlanApplied: true,
replayWithoutDuplicates: true,
viewports: [1440, 390],
errors,
},
null,
2,
),
);
console.log(
'QA browser passed: public project/cluster/opportunity navigation, hierarchy, two member sites, chains, filters, authenticated 28-location repair and idempotent replay.',
);
} finally {
await browser.close();
}
})().catch((error) => {
console.error(error);
process.exitCode = 1;
});