Files
notesnook/apps/web/__e2e__/user.test.js

242 lines
5.9 KiB
JavaScript
Raw Normal View History

2021-08-20 11:50:29 +05:00
const { Page, test, expect } = require("@playwright/test");
2021-12-31 09:19:33 +05:00
const { getTestId, isTestAll, loginUser, USER } = require("./utils");
2021-09-13 11:08:28 +05:00
const { isAbsent, isPresent } = require("./utils/conditions");
2021-08-20 11:50:29 +05:00
/**
* @type {Page}
*/
var page = null;
global.page = null;
2021-09-13 11:08:28 +05:00
test.beforeEach(async ({ page: _page, baseURL }) => {
2021-08-20 11:50:29 +05:00
global.page = _page;
page = _page;
2021-09-13 11:08:28 +05:00
await page.goto(baseURL);
await page.waitForSelector(getTestId("routeHeader"));
2021-08-20 11:50:29 +05:00
});
2021-12-16 11:39:54 +05:00
if (!isTestAll()) test.skip();
2022-01-03 13:09:00 +05:00
async function logoutUser() {
2021-12-09 12:36:29 +05:00
await page.click(getTestId("navitem-settings"));
await page.click(getTestId("settings-logout"));
await page.waitForSelector(getTestId("dialog-yes"));
await page.click(getTestId("dialog-yes"));
expect(await isAbsent(getTestId("navitem-sync"))).toBe(true);
2022-01-03 13:09:00 +05:00
}
2022-01-03 13:20:01 +05:00
async function forceExpireSession() {
await page.evaluate(() => {
window.localStorage.setItem("sessionExpired", "true");
});
await page.reload();
}
2022-01-03 13:09:00 +05:00
test("login user", async () => {
await loginUser();
expect(await isPresent(getTestId("navitem-sync"))).toBe(true);
2021-12-09 12:36:29 +05:00
});
2021-12-31 09:19:33 +05:00
2022-01-03 13:09:00 +05:00
test("logout user", async () => {
await loginUser();
await logoutUser();
});
test("login user and change password repeatedly", async ({
2021-12-31 09:19:33 +05:00
page,
browserName,
}) => {
test.setTimeout(6 * 60 * 1000);
2021-12-31 09:19:33 +05:00
test.skip(browserName !== "chromium", "Cannot run in parallel.");
let currentPassword = USER.password;
let newPassword = "";
2021-12-31 09:19:33 +05:00
let email = USER.email;
for (let i = 0; i < 10; i++) {
await test.step(
`login user using password ${currentPassword} (${i})`,
async () => {
await loginUser({
email,
password: currentPassword,
});
await page.waitForSelector(getTestId("sync-status-success"));
await page.click(getTestId("navitem-settings"));
await page.click(getTestId("settings-change-password"));
await page.waitForSelector(getTestId("dialog-yes"));
await page.fill(getTestId("dialog-password"), currentPassword);
await page.fill(getTestId("dialog-new-password"), newPassword);
await page.click(getTestId("dialog-yes"));
expect(await isAbsent(getTestId("dialog-yes"), 60 * 1000)).toBe(true);
2022-01-03 13:09:00 +05:00
await logoutUser();
2021-12-31 09:19:33 +05:00
const cPassword = currentPassword;
currentPassword = newPassword;
newPassword = cPassword;
}
);
}
});
2022-01-03 13:09:00 +05:00
test("reset user password using recovery key", async ({
page,
browserName,
}) => {
test.setTimeout(2 * 60 * 1000);
test.skip(browserName !== "chromium", "Cannot run in parallel.");
await recoverAccount(async ({ currentKey }) => {
await page.click(getTestId("step-recovery-key"));
await page.waitForSelector(getTestId("step-recovery-key"));
await page.fill(getTestId("recovery_key"), currentKey);
await page.click(getTestId("step-next"));
});
});
test("reset user password after session expiry", async ({
page,
browserName,
}) => {
2022-01-03 13:09:00 +05:00
test.setTimeout(2 * 60 * 1000);
test.skip(browserName !== "chromium", "Cannot run in parallel.");
let newPassword = "";
let newKey = "";
let currentPassword = USER.password;
let currentKey = "";
let email = USER.email;
for (let i = 0; i <= 1; ++i) {
await loginUser({ email, password: currentPassword });
2022-01-03 13:09:00 +05:00
await forceExpireSession();
2022-01-03 13:09:00 +05:00
await page.click(getTestId("auth-forgot-password"));
2022-01-03 13:09:00 +05:00
await page.click(getTestId("submitButton"));
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);
2022-01-03 13:09:00 +05:00
await page.waitForSelector(getTestId("sync-status-success"));
await logoutUser();
const cPassword = currentPassword;
currentPassword = newPassword;
newPassword = cPassword;
const cKey = currentKey;
currentKey = newKey;
newKey = cKey;
}
});
2022-01-03 13:20:01 +05:00
test("reset user password using old password", async ({
2022-01-03 13:20:01 +05:00
page,
browserName,
}) => {
test.setTimeout(2 * 60 * 1000);
test.skip(browserName !== "chromium", "Cannot run in parallel.");
await recoverAccount(async ({ currentPassword }) => {
await page.click(getTestId("step-old-password"));
await page.waitForSelector(getTestId("step-old-password"));
await page.fill(getTestId("old_password"), currentPassword);
await page.click(getTestId("step-next"));
});
});
2022-01-03 13:20:01 +05:00
async function recoverAccount(submitRecoveryData) {
let newPassword = "";
2022-01-03 13:20:01 +05:00
let newKey = "";
let currentPassword = USER.password;
let currentKey = "";
2022-01-03 13:20:01 +05:00
let email = USER.email;
for (let i = 0; i <= 1; ++i) {
await page.click(getTestId("navitem-login"));
2022-01-03 13:20:01 +05:00
await page.click(getTestId("auth-forgot-password"));
await page.fill(getTestId("email"), email);
2022-01-03 13:20:01 +05:00
await page.click(getTestId("submitButton"));
await page.waitForSelector(getTestId("step-recovery-options"));
await submitRecoveryData({ currentPassword, currentKey });
2022-01-03 13:20:01 +05:00
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({ email, password: newPassword }, false);
2022-01-03 13:20:01 +05:00
await page.waitForSelector(getTestId("sync-status-success"));
await logoutUser();
const cPassword = currentPassword;
currentPassword = newPassword;
newPassword = cPassword;
const cKey = currentKey;
currentKey = newKey;
newKey = cKey;
}
}