mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-23 23:19:40 +01:00
306 lines
8.4 KiB
TypeScript
306 lines
8.4 KiB
TypeScript
/*
|
|
This file is part of the Notesnook project (https://notesnook.com/)
|
|
|
|
Copyright (C) 2023 Streetwriters (Private) Limited
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import { test, expect } from "@playwright/test";
|
|
import { AppModel } from "./models/app.model";
|
|
import { getTestId, USER } from "./utils";
|
|
|
|
// async function forceExpireSession() {
|
|
// await page.evaluate(() => {
|
|
// window.localStorage.setItem("sessionExpired", "true");
|
|
// });
|
|
// await page.reload();
|
|
// }
|
|
|
|
test.setTimeout(45 * 1000);
|
|
|
|
test("login user", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.auth.goto();
|
|
|
|
await app.auth.login(USER.CURRENT);
|
|
|
|
const settings = await app.goToSettings();
|
|
expect(await settings.isLoggedIn()).toBeTruthy();
|
|
});
|
|
|
|
test("logout user", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.auth.goto();
|
|
await app.auth.login(USER.CURRENT);
|
|
|
|
const settings = await app.goToSettings();
|
|
await settings?.logout();
|
|
|
|
expect(await settings.isLoggedIn()).toBeFalsy();
|
|
});
|
|
|
|
test("check recovery key of user", async ({ page }) => {
|
|
const app = new AppModel(page);
|
|
await app.auth.goto();
|
|
await app.auth.login(USER.CURRENT);
|
|
const settings = await app.goToSettings();
|
|
|
|
const key =
|
|
USER.CURRENT.password &&
|
|
(await settings.getRecoveryKey(USER.CURRENT.password));
|
|
|
|
expect(key?.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
test("login user & wait for sync", async ({ page }, info) => {
|
|
info.setTimeout(45 * 1000);
|
|
|
|
const app = new AppModel(page);
|
|
await app.auth.goto();
|
|
|
|
await app.auth.login(USER.CURRENT);
|
|
|
|
await app.waitForSync("synced");
|
|
expect(await app.isSynced()).toBeTruthy();
|
|
});
|
|
|
|
test("logged in user should not be able to open unauthorized routes", async ({
|
|
page
|
|
}, info) => {
|
|
info.setTimeout(45 * 1000);
|
|
|
|
const app = new AppModel(page);
|
|
await app.auth.goto();
|
|
await app.auth.login(USER.CURRENT);
|
|
|
|
const unauthorizedRoutes = [
|
|
"/login",
|
|
"/signup",
|
|
"/recover",
|
|
"/mfa/code",
|
|
"/mfa/select"
|
|
] as const;
|
|
|
|
for (const route of unauthorizedRoutes) {
|
|
await page.goto(route);
|
|
|
|
await page.waitForURL(/\/notes/gm);
|
|
await page.waitForTimeout(1000);
|
|
expect(await app.navigation.findItem("Notes")).toBeDefined();
|
|
}
|
|
});
|
|
|
|
// test("login user and change password repeatedly", async ({
|
|
// page,
|
|
// browserName
|
|
// }) => {
|
|
// test.setTimeout(2 * 60 * 1000);
|
|
// test.skip(browserName !== "chromium", "Cannot run in parallel.");
|
|
|
|
// let currentPassword = USER.CURRENT.password;
|
|
// let newPassword = USER.NEW.password;
|
|
// let email = USER.email;
|
|
|
|
// for (let i = 0; i < 3; i++) {
|
|
// // eslint-disable-next-line no-loop-func
|
|
// await test.step(`login user using password ${currentPassword} (${i})`, async () => {
|
|
// await loginUser({
|
|
// email,
|
|
// password: currentPassword
|
|
// });
|
|
|
|
// await page.waitForSelector(getTestId("sync-status-synced"));
|
|
|
|
// 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);
|
|
|
|
// await logoutUser();
|
|
|
|
// await page.reload();
|
|
|
|
// await page.waitForTimeout(2000);
|
|
|
|
// const cPassword = currentPassword;
|
|
// currentPassword = newPassword;
|
|
// newPassword = cPassword;
|
|
// });
|
|
// }
|
|
// });
|
|
|
|
// 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("recoveryKey"), currentKey);
|
|
|
|
// await page.click(getTestId("submitButton"));
|
|
// });
|
|
// });
|
|
|
|
// 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 = USER.CURRENT.password;
|
|
// let currentKey = USER.CURRENT.key;
|
|
|
|
// let newPassword = USER.NEW.password;
|
|
// let newKey = USER.NEW.key;
|
|
|
|
// 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-new-password"));
|
|
|
|
// await page.fill(getTestId("password"), newPassword);
|
|
|
|
// await page.fill(getTestId("confirmPassword"), newPassword);
|
|
|
|
// await page.click(getTestId("submitButton"));
|
|
|
|
// await page.waitForSelector(getTestId("step-finished"));
|
|
|
|
// const actualRecoveryKey = await page.innerText(getTestId("recoveryKey"));
|
|
// expect(actualRecoveryKey).toBe(newKey);
|
|
|
|
// await page.click(getTestId("dialog-yes"));
|
|
|
|
// await page.click(getTestId("submitButton"));
|
|
|
|
// await loginUser({ password: newPassword }, false);
|
|
|
|
// await page.waitForSelector(getTestId("sync-status-synced"));
|
|
|
|
// await logoutUser();
|
|
|
|
// const cPassword = currentPassword;
|
|
// currentPassword = newPassword;
|
|
// newPassword = cPassword;
|
|
|
|
// const cKey = currentKey;
|
|
// currentKey = newKey;
|
|
// newKey = cKey;
|
|
// }
|
|
// });
|
|
|
|
// test("reset user password using old password", async ({
|
|
// 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("submitButton"));
|
|
// });
|
|
// });
|
|
|
|
// async function recoverAccount(submitRecoveryData) {
|
|
// let currentPassword = USER.CURRENT.password;
|
|
// let currentKey = USER.CURRENT.key;
|
|
|
|
// let newPassword = USER.NEW.password;
|
|
// let newKey = USER.NEW.key;
|
|
|
|
// let email = USER.email;
|
|
|
|
// for (let i = 0; i <= 1; ++i) {
|
|
// await page.click(getTestId("navitem-login"));
|
|
|
|
// await page.click(getTestId("auth-forgot-password"));
|
|
|
|
// await page.fill(getTestId("email"), email);
|
|
|
|
// await page.click(getTestId("submitButton"));
|
|
|
|
// await page.waitForNavigation({ url: /account\/recovery/ });
|
|
|
|
// await page.waitForSelector(getTestId("step-recovery-methods"));
|
|
|
|
// await submitRecoveryData({ currentPassword, currentKey });
|
|
|
|
// await page.waitForSelector(getTestId("step-backup-data"));
|
|
|
|
// await page.click(getTestId("submitButton"));
|
|
|
|
// await page.waitForSelector(getTestId("step-new-password"));
|
|
|
|
// await page.fill(getTestId("password"), newPassword);
|
|
|
|
// await page.fill(getTestId("confirmPassword"), newPassword);
|
|
|
|
// await page.click(getTestId("submitButton"));
|
|
|
|
// await page.waitForSelector(getTestId("step-finished"));
|
|
|
|
// const actualRecoveryKey = await page.innerText(getTestId("recoveryKey"));
|
|
// expect(actualRecoveryKey).toBe(newKey);
|
|
|
|
// await page.click(getTestId("dialog-yes"));
|
|
|
|
// await page.click(getTestId("submitButton"));
|
|
|
|
// await loginUser({ email, password: newPassword }, false);
|
|
|
|
// await page.waitForSelector(getTestId("sync-status-synced"));
|
|
|
|
// await logoutUser();
|
|
|
|
// const cPassword = currentPassword;
|
|
// currentPassword = newPassword;
|
|
// newPassword = cPassword;
|
|
|
|
// const cKey = currentKey;
|
|
// currentKey = newKey;
|
|
// newKey = cKey;
|
|
// }
|
|
// }
|