diff --git a/apps/web/tests/create-delete-poll.spec.ts b/apps/web/tests/create-delete-poll.spec.ts index 3c5fdfcc866..b688a0704b5 100644 --- a/apps/web/tests/create-delete-poll.spec.ts +++ b/apps/web/tests/create-delete-poll.spec.ts @@ -15,7 +15,7 @@ test.describe.serial(() => { test("create a new poll", async () => { const newPollPage = new NewPollPage(page); - await newPollPage.createPollAndCloseDialog(); + await newPollPage.createPollAndCloseDialog({ name: "Monthly Meetup" }); await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup"); }); diff --git a/apps/web/tests/edit-options.spec.ts b/apps/web/tests/edit-options.spec.ts index 02cb503d0cc..a6ab172a4db 100644 --- a/apps/web/tests/edit-options.spec.ts +++ b/apps/web/tests/edit-options.spec.ts @@ -11,7 +11,9 @@ test.describe("edit options", () => { page = await browser.newPage(); const newPollPage = new NewPollPage(page); await newPollPage.goto(); - const pollPage = await newPollPage.createPollAndCloseDialog(); + const pollPage = await newPollPage.createPollAndCloseDialog({ + name: "Monthly Meetup", + }); await pollPage.addParticipant("Mark"); editOptionsPage = await pollPage.editOptions(); }); diff --git a/apps/web/tests/guest-to-user-migration.spec.ts b/apps/web/tests/guest-to-user-migration.spec.ts index 7178ed210e6..ec04ebd3cdd 100644 --- a/apps/web/tests/guest-to-user-migration.spec.ts +++ b/apps/web/tests/guest-to-user-migration.spec.ts @@ -2,6 +2,7 @@ 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"; @@ -26,7 +27,7 @@ test.describe.serial(() => { }) => { // Step 1: Create a poll as guest const newPollPage = new NewPollPage(page); - await newPollPage.createPollAndCloseDialog(); + await newPollPage.createPollAndCloseDialog({ name: "Monthly Meetup" }); await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup"); // Step 2: Navigate to registration @@ -46,4 +47,26 @@ test.describe.serial(() => { await page.click("text=Monthly Meetup"); 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"); + }); }); diff --git a/apps/web/tests/login-page.ts b/apps/web/tests/login-page.ts new file mode 100644 index 00000000000..f5d77444bb1 --- /dev/null +++ b/apps/web/tests/login-page.ts @@ -0,0 +1,26 @@ +import type { Page } from "@playwright/test"; + +import { getCode } from "./utils"; + +export class LoginPage { + constructor(private readonly page: Page) {} + + async goto() { + await this.page.goto("/login"); + await this.page.getByText("Welcome").waitFor(); + } + + async login({ email }: { email: string }) { + // Fill in registration form + await this.page.getByPlaceholder("jessie.smith@example.com").fill(email); + + await this.page + .getByRole("button", { name: "Continue with Email", exact: true }) + .click(); + + // Handle verification code + const code = await getCode(email); + await this.page.getByText("Finish Logging In").waitFor(); + await this.page.getByPlaceholder("Enter your 6-digit code").fill(code); + } +} diff --git a/apps/web/tests/new-poll-page.ts b/apps/web/tests/new-poll-page.ts index 31b002964ff..5efcbe94787 100644 --- a/apps/web/tests/new-poll-page.ts +++ b/apps/web/tests/new-poll-page.ts @@ -8,23 +8,23 @@ export class NewPollPage { await this.page.goto("/new"); } - async createPollAndCloseDialog() { + async createPollAndCloseDialog({ name }: { name: string }) { await this.goto(); - const pollPage = await this.createPoll(); + const pollPage = await this.createPoll({ name }); await pollPage.closeDialog(); return pollPage; } - async createPoll() { + async createPoll({ name }: { name: string }) { const page = this.page; - await page.fill('[placeholder="Monthly Meetup"]', "Monthly Meetup"); + await page.fill('[placeholder="Monthly Meetup"]', name); // click on label to focus on input await page.click('text="Location"'); - await page.keyboard.type("Joe's Coffee Shop"); + await page.keyboard.type("Online"); await page.click('text="Description"'); - await page.keyboard.type("This is a test description"); + await page.keyboard.type("Hey everyone, what time can you meet?"); await page.click('[title="Next month"]'); diff --git a/apps/web/tests/register-page.ts b/apps/web/tests/register-page.ts index 19aa74bcb7d..5b88c372d96 100644 --- a/apps/web/tests/register-page.ts +++ b/apps/web/tests/register-page.ts @@ -12,7 +12,6 @@ export class RegisterPage { } async register({ name, email }: { name: string; email: string }) { - await this.goto(); // Fill in registration form await this.page.getByPlaceholder("Jessie Smith").fill(name); await this.page.getByPlaceholder("jessie.smith@example.com").fill(email); diff --git a/apps/web/tests/vote-and-comment.spec.ts b/apps/web/tests/vote-and-comment.spec.ts index 0345b67852c..ba4dc08be1f 100644 --- a/apps/web/tests/vote-and-comment.spec.ts +++ b/apps/web/tests/vote-and-comment.spec.ts @@ -21,7 +21,9 @@ test.describe(() => { ); const newPollPage = new NewPollPage(page); await newPollPage.goto(); - pollPage = await newPollPage.createPollAndCloseDialog(); + pollPage = await newPollPage.createPollAndCloseDialog({ + name: "Monthly Meetup", + }); }); test("should call touch endpoint", async () => {