166 lines
5.3 KiB
JavaScript
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);
|
|
});
|