Files
html/api/v89_e2e_business.js
opus 4c4d3ce34d
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync via WEVIA git_sync_all intent 2026-04-20T14:31:19+02:00
2026-04-20 14:31:19 +02:00

124 lines
5.3 KiB
JavaScript

// V89 E2E Business Scenario · Selenium/Playwright · login → WTP → CRM → KPIs
const { chromium } = require('playwright');
const fs = require('fs');
(async () => {
const browser = await chromium.launch({ headless: true });
const ctx = await browser.newContext({
viewport: { width: 1440, height: 900 },
recordVideo: { dir: '/tmp/v89-videos/' }
});
const page = await ctx.newPage();
const results = [];
const errs = [];
page.on('pageerror', e => errs.push(e.message));
async function step(name, fn) {
const t0 = Date.now();
try {
const r = await fn();
const elapsed = Date.now() - t0;
results.push({ name, status: 'OK', ms: elapsed, ...(r||{}) });
console.log(`${name} (${elapsed}ms)`);
} catch (e) {
results.push({ name, status: 'FAIL', err: e.message });
console.log(`${name}: ${e.message}`);
}
}
// STEP 1: Login WTP
await step('S1_login_wtp', async () => {
await page.goto('https://weval-consulting.com/weval-technology-platform.html', { waitUntil: 'domcontentloaded', timeout: 30000 });
const title = await page.title();
const url = page.url();
// Detect login form
const hasLoginForm = await page.$('input[type="password"]') !== null;
return { title, url, hasLoginForm };
});
// STEP 2: If login page, authenticate
await step('S2_authenticate', async () => {
const loginInput = await page.$('input[type="password"]');
if (!loginInput) return { skipped: true, reason: 'no login required' };
// Try common fields
const userInput = await page.$('input[name="username"],input[type="email"],input[type="text"]');
if (userInput) await userInput.fill('yacine@weval-consulting.com');
await loginInput.fill('WEVAL2026');
const btn = await page.$('button[type="submit"],button');
if (btn) await btn.click();
await page.waitForTimeout(3000);
return { url: page.url() };
});
// STEP 3: Load business KPI dashboard
await step('S3_business_kpi', async () => {
await page.goto('https://weval-consulting.com/business-kpi-dashboard.php', { waitUntil: 'domcontentloaded', timeout: 20000 });
await page.waitForTimeout(2000);
const bodyText = await page.textContent('body');
const hasKPI = bodyText.includes('Revenue') || bodyText.includes('KPI') || bodyText.includes('MRR');
await page.screenshot({ path: '/tmp/v89-biz-kpi.png' });
return { textLen: bodyText.length, hasKPI };
});
// STEP 4: CRM bridge V68
await step('S4_crm_bridge', async () => {
await page.goto('https://weval-consulting.com/wevia-admin-crm-v68.php', { waitUntil: 'domcontentloaded', timeout: 20000 });
await page.waitForTimeout(2000);
await page.screenshot({ path: '/tmp/v89-crm.png' });
return { url: page.url() };
});
// STEP 5: WEVIA Master chat
await step('S5_wevia_master', async () => {
await page.goto('https://weval-consulting.com/wevia-master.html', { waitUntil: 'domcontentloaded', timeout: 20000 });
await page.waitForTimeout(3000);
const hasChat = await page.$('[id*="chat"],[class*="chat"],textarea,input[type="text"]') !== null;
await page.screenshot({ path: '/tmp/v89-master.png' });
return { hasChat };
});
// STEP 6: 15 Depts KPI
await step('S6_depts_kpi', async () => {
const r = await page.goto('https://weval-consulting.com/api/wevia-v64-departments-kpi.php', { timeout: 15000 });
const status = r.status();
const body = await r.text();
const j = JSON.parse(body);
return { status, agents_pct: j.summary.gap_ratio_pct, global_maturity: j.summary.global_maturity_pct };
});
// STEP 7: Archi Manifest
await step('S7_manifest', async () => {
const r = await page.goto('https://weval-consulting.com/api/weval-archi-manifest.php', { timeout: 10000 });
const body = await r.text();
const j = JSON.parse(body);
return { status: r.status(), nr: `${j.meta_health.nr_combined.pass}/${j.meta_health.nr_combined.total}` };
});
// STEP 8: em-live-kpi perf check (V85 cached)
await step('S8_em_live_cached', async () => {
const t0 = Date.now();
const r = await page.goto('https://weval-consulting.com/api/em-live-kpi.php', { timeout: 15000 });
const ms = Date.now() - t0;
return { status: r.status(), fetch_ms: ms, cache_hit: ms < 1000 };
});
await ctx.close();
await browser.close();
const summary = {
ts: new Date().toISOString(),
test: 'V89 E2E Business Scenario',
steps: results,
page_errors: errs,
total_ok: results.filter(r => r.status === 'OK').length,
total_fail: results.filter(r => r.status === 'FAIL').length,
videos_dir: '/tmp/v89-videos/',
screenshots: ['v89-biz-kpi.png', 'v89-crm.png', 'v89-master.png']
};
fs.writeFileSync('/var/www/html/api/playwright-v89-business-latest.json', JSON.stringify(summary, null, 2));
console.log('\n=== SUMMARY ===');
console.log(`OK: ${summary.total_ok}/${results.length} · FAIL: ${summary.total_fail} · errors: ${errs.length}`);
})();