95 lines
3.3 KiB
TypeScript
95 lines
3.3 KiB
TypeScript
import { expect } from "@playwright/test";
|
|
import { UserPlan } from "@prisma/client";
|
|
|
|
import { ErrorCode } from "@lib/auth";
|
|
|
|
import { login } from "./fixtures/users";
|
|
import { test } from "./lib/fixtures";
|
|
import { localize } from "./lib/testUtils";
|
|
|
|
test.describe("Login and logout tests", () => {
|
|
// Test login with all plans
|
|
const plans = [UserPlan.PRO, UserPlan.FREE, UserPlan.TRIAL];
|
|
plans.forEach((plan) => {
|
|
test(`Should login with a ${plan} account`, async ({ page, users }) => {
|
|
// Create user and login
|
|
const pro = await users.create({ plan });
|
|
await pro.login();
|
|
|
|
const shellLocator = await page.locator(`[data-testid=dashboard-shell]`);
|
|
|
|
// expects the home page for an authorized user
|
|
await page.goto("/");
|
|
await expect(shellLocator).toBeVisible();
|
|
|
|
// Asserts to read the tested plan
|
|
const planLocator = shellLocator.locator(`[data-testid=plan-${plan.toLowerCase()}]`);
|
|
await expect(planLocator).toBeVisible();
|
|
await await expect(planLocator).toHaveText;
|
|
|
|
// When TRIAL check if the TRIAL banner is visible
|
|
if (plan === UserPlan.TRIAL) {
|
|
await expect(page.locator(`[data-testid=trial-banner]`)).toBeVisible();
|
|
}
|
|
});
|
|
});
|
|
|
|
test("Should warn when user does not exist", async ({ page, users }) => {
|
|
const alertMessage = (await localize("en"))("no_account_exists");
|
|
|
|
// Login with a non-existent user
|
|
const never = "never";
|
|
await login({ username: never }, page);
|
|
|
|
// assert for the visibility of the localized alert message
|
|
await expect(page.locator(`text=${alertMessage}`)).toBeVisible();
|
|
});
|
|
|
|
test("Should warn when password is incorrect", async ({ page, users }) => {
|
|
const alertMessage = (await localize("en"))("incorrect_password");
|
|
// by default password===username with the users fixture
|
|
const pro = await users.create({ username: "pro" });
|
|
|
|
// login with a wrong password
|
|
await login({ username: "pro", password: "wrong" }, page);
|
|
|
|
// assert for the visibility of the localized alert message
|
|
await expect(page.locator(`text=${alertMessage}`)).toBeVisible();
|
|
});
|
|
|
|
test("Should logout", async ({ page, users }) => {
|
|
const signOutLabel = (await localize("en"))("sign_out");
|
|
const userDropdownDisclose = async () =>
|
|
(await page.locator("[data-testid=user-dropdown-trigger]")).click();
|
|
|
|
// creates a user and login
|
|
const pro = await users.create();
|
|
await pro.login();
|
|
|
|
// disclose and click the sign out button from the user dropdown
|
|
await userDropdownDisclose();
|
|
const signOutBtn = await page.locator(`text=${signOutLabel}`);
|
|
await signOutBtn.click();
|
|
|
|
// 2s of delay to assure the session is cleared
|
|
await page.waitForTimeout(2000);
|
|
|
|
// Reroute to the home page to check if the login form shows up
|
|
await page.goto("/");
|
|
await expect(page.locator(`[data-testid=login-form]`)).toBeVisible();
|
|
});
|
|
|
|
test("Should logout using the logout route", async ({ page, users }) => {
|
|
// creates a user and login
|
|
const pro = await users.create();
|
|
await pro.login();
|
|
|
|
// users.logout() action uses the logout route "/auth/logout" to clear the session
|
|
await users.logout();
|
|
|
|
// check if we are at the login page
|
|
await page.goto("/");
|
|
await expect(page.locator(`[data-testid=login-form]`)).toBeVisible();
|
|
});
|
|
});
|