diff --git a/apps/web/__e2e__/user.test.js b/apps/web/__e2e__/user.test.js index 9e1199dad..33e96cdc7 100644 --- a/apps/web/__e2e__/user.test.js +++ b/apps/web/__e2e__/user.test.js @@ -28,6 +28,13 @@ async function logoutUser() { expect(await isAbsent(getTestId("navitem-sync"))).toBe(true); } +async function forceExpireSession() { + await page.evaluate(() => { + window.localStorage.setItem("sessionExpired", "true"); + }); + await page.reload(); +} + test("login user", async () => { await loginUser(); @@ -146,3 +153,62 @@ test("reset user password", async ({ page, browserName }) => { newKey = cKey; } }); + +test("reset user password after session expiry", async ({ + page, + browserName, +}) => { + test.setTimeout(2 * 60 * 1000); + test.skip(browserName !== "chromium", "Cannot run in parallel."); + + let currentPassword = ""; + let currentKey = ""; + + let newPassword = USER.password; + let newKey = ""; + + let email = USER.email; + + for (let i = 0; i <= 1; ++i) { + await loginUser({ email, password: currentPassword }); + + await forceExpireSession(); + + await page.click(getTestId("auth-forgot-password")); + + await page.click(getTestId("submitButton")); + + await page.waitForSelector(getTestId("step-backup-data")); + + await page.click(getTestId("step-next")); + + await page.waitForSelector(getTestId("step-new-password")); + + await page.fill(getTestId("new_password"), newPassword); + + await page.click(getTestId("step-next")); + + await page.waitForSelector(getTestId("step-finished")); + + const actualRecoveryKey = await page.innerText( + getTestId("new-recovery-key") + ); + expect(actualRecoveryKey).toBe(newKey); + + await page.click(getTestId("step-finish")); + + await loginUser({ password: newPassword }, false); + + await page.waitForSelector(getTestId("sync-status-success")); + + await logoutUser(); + + const cPassword = currentPassword; + currentPassword = newPassword; + newPassword = cPassword; + + const cKey = currentKey; + currentKey = newKey; + newKey = cKey; + } +}); diff --git a/apps/web/__e2e__/utils/index.js b/apps/web/__e2e__/utils/index.js index 3ed9e3d40..3d1e2cc52 100644 --- a/apps/web/__e2e__/utils/index.js +++ b/apps/web/__e2e__/utils/index.js @@ -13,7 +13,7 @@ const USER = { async function loginUser(user = USER, navigate = true) { if (navigate) await page.click(getTestId("navitem-login")); - await page.fill(getTestId("email"), user.email); + if (user.email) await page.fill(getTestId("email"), user.email); await page.fill(getTestId("password"), user.password); diff --git a/apps/web/playwright.config.js b/apps/web/playwright.config.js index 1389f00ad..ef431785f 100644 --- a/apps/web/playwright.config.js +++ b/apps/web/playwright.config.js @@ -18,14 +18,14 @@ const projects = IS_CI browserName: "chromium", }, }, - { - name: "Firefox", - use: { browserName: "firefox" }, - }, - { - name: "WebKit", - use: { browserName: "webkit" }, - }, + // { + // name: "Firefox", + // use: { browserName: "firefox" }, + // }, + // { + // name: "WebKit", + // use: { browserName: "webkit" }, + // }, ]; module.exports = { @@ -44,7 +44,7 @@ module.exports = { reporter: "list", retries: IS_CI ? 3 : 1, use: { - headless: true, + headless: false, acceptDownloads: true, // Artifacts diff --git a/apps/web/src/views/recovery.js b/apps/web/src/views/recovery.js index bed4d3665..f2132b73c 100644 --- a/apps/web/src/views/recovery.js +++ b/apps/web/src/views/recovery.js @@ -400,7 +400,8 @@ function FinalStep() { })(); }, [isSessionExpired]); - if (!isReady) return ; + if (!isReady && !isSessionExpired) + return ; return (