feat: Enhance FaceAI functionality and improve login process
All checks were successful
Publish FaceAI Container / publish (push) Successful in 4m43s

- Added a retry mechanism for page navigation in `live-site-test-utils.js` to handle transient errors during login.
- Introduced a new function `performLiveLoginRequest` to handle login requests via API, improving the login flow.
- Updated the login process to utilize the new API request method, ensuring a more robust authentication.
- Implemented new utility functions in `rus-ecom-240621.js` for managing FaceAI state and filtering.
- Created `faceai_photo_lookup.jsp` to handle photo lookups, returning JSON responses for better integration with the frontend.
- Updated `faceai_return.php` to redirect users with appropriate parameters after FaceAI processing.
- Modified `fotoCR.jsp` and `fotoCR-en.jsp` to include FaceAI photo IDs in the image elements for better tracking.
- Enhanced the UI to display the number of matched photos dynamically based on FaceAI results.
This commit is contained in:
MaddoScientisto 2026-04-19 14:18:00 +02:00
commit bba8026b7c
17 changed files with 1077 additions and 95 deletions

View file

@ -41,10 +41,39 @@ function loginSubmitLocator(page) {
return page.locator('a.btn').filter({ hasText: /Accedi|Sign in/i }).first();
}
function buildLoginFormData() {
requireCredentials();
return {
login: LIVE_SITE_USERNAME,
pwd: LIVE_SITE_PASSWORD,
cmdIU: 'check',
act: '',
thePage: ''
};
}
async function gotoWithRetry(page, url, options = {}, maxAttempts = 3) {
let lastError = null;
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
try {
await page.goto(url, options);
return;
} catch (error) {
lastError = error;
if (!/ERR_ABORTED/i.test(String(error)) || attempt === maxAttempts) {
throw error;
}
}
}
throw lastError;
}
async function performLiveLogin(page) {
requireCredentials();
await page.goto(LIVE_SITE_LOGIN_URL, { waitUntil: 'domcontentloaded' });
await gotoWithRetry(page, LIVE_SITE_LOGIN_URL, { waitUntil: 'commit' });
await dismissCookieBanner(page);
await page.locator('#login').fill(LIVE_SITE_USERNAME);
await page.locator('#pwd').fill(LIVE_SITE_PASSWORD);
@ -52,6 +81,24 @@ async function performLiveLogin(page) {
await waitForLoggedInUi(page);
}
async function performLiveLoginRequest(requestContext) {
const response = await requestContext.post(`${LIVE_SITE_BASE_URL}/Logon.abl`, {
form: buildLoginFormData(),
failOnStatusCode: false
});
const finalUrl = response.url();
const bodyText = await response.text();
if (!response.ok()) {
throw new Error(`Live login request failed with HTTP ${response.status()} at ${finalUrl}`);
}
if (/login_clienti|Username \/ Email|Password/iu.test(bodyText) && !/user_logout|dettaglio_clienti|Il mio account/iu.test(bodyText)) {
throw new Error(`Live login request appears to have remained on the login page at ${finalUrl}`);
}
}
async function waitForLoggedInUi(page) {
const accountMenu = page.locator('#navbarDropdownMenuLink');
const accountLink = page.locator('a[href*="dettaglio_clienti"]');
@ -81,14 +128,14 @@ async function expectRacePageLoaded(page) {
}
async function ensureLiveAuthenticatedRacePage(page) {
await page.goto(LIVE_SITE_RACE_URL, { waitUntil: 'domcontentloaded' });
await gotoWithRetry(page, LIVE_SITE_RACE_URL, { waitUntil: 'commit' });
await dismissCookieBanner(page);
try {
await waitForLoggedInUi(page);
} catch (error) {
await performLiveLogin(page);
await page.goto(LIVE_SITE_RACE_URL, { waitUntil: 'domcontentloaded' });
await performLiveLoginRequest(page.context().request);
await gotoWithRetry(page, LIVE_SITE_RACE_URL, { waitUntil: 'commit' });
await dismissCookieBanner(page);
await waitForLoggedInUi(page);
}
@ -119,6 +166,7 @@ module.exports = {
expectRacePageLoaded,
loginSubmitLocator,
performLiveLogin,
performLiveLoginRequest,
requirePortraitFixture,
requireCredentials,
waitForLoggedInUi