fix(h5): show raw skin age, support Harmony touch pickers and add WeChat logout
This commit is contained in:
@@ -72,6 +72,7 @@ try {
|
||||
await page.click('[data-action="login-confirm"]');
|
||||
assert.equal(await page.locator('#p-login-success.show').count(), 0);
|
||||
assert.equal(await page.locator('#s-splash').evaluate(e => e.inert), false);
|
||||
assert.equal(await page.locator('#s-splash [data-action="logout-wechat"]').isVisible(), true);
|
||||
}
|
||||
for (let device = 0; device < 2; device++) {
|
||||
const context = await browser.newContext({ ignoreHTTPSErrors: true, userAgent: 'Mozilla/5.0 MicroMessenger/8.0', viewport: { width: 375, height: 726 } });
|
||||
@@ -165,6 +166,48 @@ try {
|
||||
assert.equal(await page.evaluate(() => AccountClient.user()), null);
|
||||
assert.equal(await page.locator('#p-login-success.show').count(), 0, 'session restore must not repeatedly open a success dialog');
|
||||
}
|
||||
if (device === 1) {
|
||||
const reportFile = path.join(root, 'accounts/reports', user.id, saved.id + '.json');
|
||||
const originalBytes = fs.readFileSync(reportFile, 'utf8');
|
||||
const logout = page.locator('#s-history [data-action="logout-wechat"]');
|
||||
assert.equal(await logout.textContent(), '退出登录');
|
||||
page.once('dialog', dialog => { assert(dialog.message().includes('历史报告将保留')); dialog.dismiss(); });
|
||||
await logout.click();
|
||||
assert.equal((await api(page, 'auth/session')).data.user.id, user.id, 'cancel leaves session intact');
|
||||
await page.route('**/api/auth/logout', route => route.fulfill({ status: 503, json: { ok: false, message: '退出测试失败' } }));
|
||||
page.once('dialog', dialog => dialog.accept()); await logout.click();
|
||||
await page.waitForFunction(() => document.querySelector('#toast').textContent.includes('退出失败'));
|
||||
assert.equal(await page.evaluate(() => AccountClient.user().id), user.id, 'failure does not fake local logout');
|
||||
assert.equal((await api(page, 'auth/session')).data.user.id, user.id);
|
||||
await page.unroute('**/api/auth/logout');
|
||||
await page.waitForFunction(() => !document.querySelector('#s-history [data-action="logout-wechat"]').disabled);
|
||||
let heldReport, markHeld;
|
||||
const reportHeld = new Promise(resolve => { markHeld = resolve; });
|
||||
await page.route('**/api/reports/' + saved.id, route => { heldReport = route; markHeld(); }, { times: 1 });
|
||||
await page.click('[data-report-id="RwechatCrossDevice"]'); await reportHeld;
|
||||
page.once('dialog', dialog => dialog.accept()); await logout.click();
|
||||
await page.waitForSelector('#s-login.active');
|
||||
assert.equal(await page.evaluate(() => AccountClient.user()), null);
|
||||
assert.equal((await api(page, 'auth/session')).data.user, null);
|
||||
assert.equal((await api(page, 'reports/' + saved.id)).status, 401);
|
||||
assert.equal(await page.locator('#login-consent').isChecked(), false);
|
||||
assert.equal(fs.readFileSync(reportFile, 'utf8'), originalBytes, 'logout retains exact historical file');
|
||||
await page.goBack(); await page.waitForSelector('#s-login.active');
|
||||
await page.click('[data-action="guest-experience"]'); await page.waitForSelector('#s-splash.active');
|
||||
await page.click('[data-action="history"]'); await page.waitForSelector('#s-history.active');
|
||||
await heldReport.fulfill({ json: { ok: true, report: JSON.parse(originalBytes) } });
|
||||
await page.waitForTimeout(250);
|
||||
assert.equal(await page.locator('#s-report.active').count(), 0, 'late WeChat report response cannot open under guest identity');
|
||||
await page.unroute('**/api/reports/' + saved.id);
|
||||
await page.click('[data-action="open-wechat-login"]');
|
||||
await page.check('#login-consent'); await page.click('[data-action="login-wechat"]');
|
||||
await page.waitForSelector('#s-splash.active'); await confirmLogin(page, 'wechat');
|
||||
assert.equal(await page.evaluate(() => AccountClient.user().id), user.id);
|
||||
await page.click('[data-action="history"]'); await page.waitForSelector('[data-report-id="RwechatCrossDevice"]');
|
||||
assert.deepEqual((await api(page, 'reports/' + saved.id)).data.report, JSON.parse(originalBytes));
|
||||
assert.equal(fs.readFileSync(reportFile, 'utf8'), originalBytes);
|
||||
console.log('PASS WeChat logout: confirm/cancel/failure, server session revoked, back guarded, re-login retains exact report');
|
||||
}
|
||||
assert.deepEqual(errors, []);
|
||||
await context.close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user