Add test for guest to logged in user migration (#1544)

This commit is contained in:
Luke Vella 2025-02-03 19:18:02 +07:00 committed by GitHub
parent 5abea1e072
commit d4b6879a41
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 64 additions and 11 deletions

View file

@ -40,6 +40,7 @@ test.describe.serial(() => {
test("user registration", async ({ page }) => { test("user registration", async ({ page }) => {
const registerPage = new RegisterPage(page); const registerPage = new RegisterPage(page);
registerPage.goto();
await registerPage.register({ await registerPage.register({
name: "Test User", name: "Test User",
email: testUserEmail, email: testUserEmail,

View file

@ -15,7 +15,7 @@ test.describe.serial(() => {
test("create a new poll", async () => { test("create a new poll", async () => {
const newPollPage = new NewPollPage(page); const newPollPage = new NewPollPage(page);
await newPollPage.createPollAndCloseDialog(); await newPollPage.createPollAndCloseDialog({ name: "Monthly Meetup" });
await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup"); await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup");
}); });

View file

@ -11,7 +11,9 @@ test.describe("edit options", () => {
page = await browser.newPage(); page = await browser.newPage();
const newPollPage = new NewPollPage(page); const newPollPage = new NewPollPage(page);
await newPollPage.goto(); await newPollPage.goto();
const pollPage = await newPollPage.createPollAndCloseDialog(); const pollPage = await newPollPage.createPollAndCloseDialog({
name: "Monthly Meetup",
});
await pollPage.addParticipant("Mark"); await pollPage.addParticipant("Mark");
editOptionsPage = await pollPage.editOptions(); editOptionsPage = await pollPage.editOptions();
}); });

View file

@ -2,6 +2,7 @@ import { expect, test } from "@playwright/test";
import { prisma } from "@rallly/database"; import { prisma } from "@rallly/database";
import { NewPollPage } from "tests/new-poll-page"; import { NewPollPage } from "tests/new-poll-page";
import { LoginPage } from "./login-page";
import { deleteAllMessages } from "./mailpit/mailpit"; import { deleteAllMessages } from "./mailpit/mailpit";
import { RegisterPage } from "./register-page"; import { RegisterPage } from "./register-page";
@ -26,7 +27,7 @@ test.describe.serial(() => {
}) => { }) => {
// Step 1: Create a poll as guest // Step 1: Create a poll as guest
const newPollPage = new NewPollPage(page); const newPollPage = new NewPollPage(page);
await newPollPage.createPollAndCloseDialog(); await newPollPage.createPollAndCloseDialog({ name: "Monthly Meetup" });
await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup"); await expect(page.getByTestId("poll-title")).toHaveText("Monthly Meetup");
// Step 2: Navigate to registration // Step 2: Navigate to registration
@ -46,4 +47,26 @@ test.describe.serial(() => {
await page.click("text=Monthly Meetup"); await page.click("text=Monthly Meetup");
await expect(page.getByTestId("poll-title")).toHaveText("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");
});
}); });

View file

@ -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);
}
}

View file

@ -8,23 +8,23 @@ export class NewPollPage {
await this.page.goto("/new"); await this.page.goto("/new");
} }
async createPollAndCloseDialog() { async createPollAndCloseDialog({ name }: { name: string }) {
await this.goto(); await this.goto();
const pollPage = await this.createPoll(); const pollPage = await this.createPoll({ name });
await pollPage.closeDialog(); await pollPage.closeDialog();
return pollPage; return pollPage;
} }
async createPoll() { async createPoll({ name }: { name: string }) {
const page = this.page; 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 // click on label to focus on input
await page.click('text="Location"'); 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.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"]'); await page.click('[title="Next month"]');

View file

@ -12,7 +12,6 @@ export class RegisterPage {
} }
async register({ name, email }: { name: string; email: string }) { async register({ name, email }: { name: string; email: string }) {
await this.goto();
// Fill in registration form // Fill in registration form
await this.page.getByPlaceholder("Jessie Smith").fill(name); await this.page.getByPlaceholder("Jessie Smith").fill(name);
await this.page.getByPlaceholder("jessie.smith@example.com").fill(email); await this.page.getByPlaceholder("jessie.smith@example.com").fill(email);

View file

@ -21,7 +21,9 @@ test.describe(() => {
); );
const newPollPage = new NewPollPage(page); const newPollPage = new NewPollPage(page);
await newPollPage.goto(); await newPollPage.goto();
pollPage = await newPollPage.createPollAndCloseDialog(); pollPage = await newPollPage.createPollAndCloseDialog({
name: "Monthly Meetup",
});
}); });
test("should call touch endpoint", async () => { test("should call touch endpoint", async () => {