205 lines
7.2 KiB
JavaScript
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;
|
|
});
|