Files
Investidor-V2/tools/portal-functional-country-browser.cjs
T
nala 6ddafc95ba
tests / ci (push) Canceled after 0s
oportunidades 4
2026-10-10 07:03:59 +02:00

166 lines
5.3 KiB
JavaScript

const {
chromium,
} = require('C:/Users/macbook/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules/playwright');
const fs = require('node:fs'),
assert = require('node:assert/strict');
const base = 'http://127.0.0.1:18096';
(async () => {
const browser = await chromium.launch({
headless: true,
executablePath:
'C:/Users/macbook/AppData/Local/ms-playwright/chromium-1243/chrome-win64/chrome.exe',
});
const errors = [],
results = [];
async function login(width) {
const context = await browser.newContext({
viewport: { width, height: 900 },
});
await context.route('**/*', (route) =>
route.request().url().startsWith(base) ||
route.request().url().startsWith('data:')
? route.continue()
: route.abort(),
);
const page = await context.newPage();
page.on('pageerror', (e) => errors.push(e.message));
await page.goto(base + '/login');
assert.match(
(await page.request.get(base + '/login')).headers()[
'x-investmoz-qa-target'
],
/_test:55441$/,
);
await page
.getByLabel('Email address')
.fill('opportunity-manager@example.invalid');
await page
.getByLabel('Password', { exact: true })
.fill('Opportunity-QA-2026!');
await page.getByRole('button', { name: 'Log in', exact: true }).click();
await page.waitForURL('**/dashboard');
return { page, context };
}
const desktop = await login(1280),
p = desktop.page;
await p.goto(base + '/investidor/profile');
await p.locator('#residence_country_codeaccount').selectOption('PT');
const saved = p.waitForResponse(
(r) =>
r.request().method() === 'PUT' &&
r.url().endsWith('/investidor/profile'),
);
await p
.getByRole('button', {
name: 'Guardar perfil de investimento',
exact: true,
})
.click();
const response = await saved;
assert(
[200, 302, 303].includes(response.status()),
`Guardar perfil: HTTP ${response.status()}`,
);
await p
.getByText('Perfil de investimento guardado.', { exact: true })
.waitFor();
await p.reload();
assert.equal(
await p.locator('#residence_country_codeaccount').inputValue(),
'PT',
);
results.push({
route: '/investidor/profile',
action: 'guardar residência',
http: response.status(),
visibleResult: true,
recovered: true,
});
await desktop.context.close();
const mobile = await login(390),
m = mobile.page;
await m.goto(base + '/investidor/profile');
await m.evaluate(() => localStorage.clear());
await m.reload();
assert.equal(
await m.locator('#residence_country_codeaccount').inputValue(),
'PT',
);
const search = m.getByRole('textbox', { name: 'Pesquisar país' }).first();
await search.fill('portugal');
assert.equal(
await m.locator('#residence_country_codeaccount option').count(),
2,
);
assert(
await m.evaluate(
() => document.documentElement.scrollWidth <= innerWidth + 1,
),
);
await m.screenshot({
path: 'storage/app/private/investmoz-v2/functional-country-mobile.png',
fullPage: true,
});
results.push({
route: '/investidor/profile',
action: 'nova sessão móvel e pesquisa',
serverRecovery: true,
localStorage: false,
});
await m.goto(base + '/oportunidades?dimension=cluster');
assert.equal(await m.getByText('ZEE', { exact: true }).count(), 0);
await m
.getByRole('textbox', { name: 'Pesquisar Província' })
.fill('Maputo');
await m
.getByLabel('Província', { exact: true })
.locator('option')
.nth(1)
.waitFor({ state: 'attached' });
assert(
(await m
.getByLabel('Província', { exact: true })
.locator('option')
.count()) > 1,
);
results.push({
route: '/oportunidades?dimension=cluster',
action: 'filtros contextuais e pesquisa provincial',
visible: true,
});
await m.goto(base + '/oportunidades?view=map');
await m
.getByRole('region', { name: 'Estruturas territoriais consultáveis' })
.waitFor();
assert(
(await m
.getByRole('region', {
name: 'Estruturas territoriais consultáveis',
})
.getByRole('link')
.count()) > 0,
);
results.push({
route: '/oportunidades?view=map',
action: 'consultar estruturas sem inventar coordenadas',
visible: true,
});
assert.deepEqual(errors, []);
const proof = {
captured_at: new Date().toISOString(),
results,
errors,
active_writes: 0,
scope: 'country profile and catalogue filters only; not full portal acceptance',
};
fs.writeFileSync(
'storage/app/private/investmoz-v2/functional-country-browser.json',
JSON.stringify(proof, null, 2),
);
console.log(JSON.stringify(proof));
await browser.close();
})().catch((e) => {
console.error(e);
process.exit(1);
});