rallly/apps/web/tests/guest-to-user-migration.spec.ts
2025-04-24 11:42:03 +01:00

68 lines
2 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { prisma } from "@rallly/database";
import { NewPollPage } from "tests/new-poll-page";
import { LoginPage } from "./login-page";
import { deleteAllMessages } from "./mailpit/mailpit";
import { RegisterPage } from "./register-page";
const TEST_USER_EMAIL = "testuser@example.com";
test.describe.serial(() => {
test.beforeAll(async () => {
await deleteAllMessages();
});
test.afterAll(async () => {
// Clean up the test user
await prisma.user.delete({
where: {
email: TEST_USER_EMAIL,
},
});
});
test("guest user can create a poll and convert to registered user", async ({
page,
}) => {
// Step 1: Create a poll as guest
const newPollPage = new NewPollPage(page);
await newPollPage.createPollAndCloseDialog({ name: "Monthly Meetup" });
await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup");
// Step 2: Navigate to registration
await page.click("text=Create an account");
await expect(page).toHaveURL(/register/);
// Step 3: Complete registration
const registerPage = new RegisterPage(page);
await registerPage.register({
name: "Test User",
email: TEST_USER_EMAIL,
});
await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup");
});
test("guest user can create a poll and link it to existing user", async ({
page,
}) => {
// Step 1: Create a poll as guest
const newPollPage = new NewPollPage(page);
await newPollPage.createPollAndCloseDialog({ name: "Board Meeting" });
await expect(page.getByTestId("poll-title")).toHaveText("Board Meeting");
// Step 2: Navigate to registration
await page.getByRole("link", { name: "Login" }).click();
await expect(page).toHaveURL(/login/);
// Step 3: Complete lplogin
const loginPage = new LoginPage(page);
await loginPage.login({
email: TEST_USER_EMAIL,
});
// Step 4: Navigate back to the poll
await expect(page.getByTestId("poll-title")).toHaveText("Board Meeting");
});
});