mirror of
https://github.com/lukevella/rallly.git
synced 2025-04-28 17:56:37 +02:00
✅ Add test for guest to logged in user migration (#1544)
This commit is contained in:
parent
5abea1e072
commit
d4b6879a41
8 changed files with 64 additions and 11 deletions
|
@ -40,6 +40,7 @@ test.describe.serial(() => {
|
|||
|
||||
test("user registration", async ({ page }) => {
|
||||
const registerPage = new RegisterPage(page);
|
||||
registerPage.goto();
|
||||
await registerPage.register({
|
||||
name: "Test User",
|
||||
email: testUserEmail,
|
||||
|
|
|
@ -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");
|
||||
});
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
|
|
|
@ -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");
|
||||
});
|
||||
});
|
||||
|
|
26
apps/web/tests/login-page.ts
Normal file
26
apps/web/tests/login-page.ts
Normal 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);
|
||||
}
|
||||
}
|
|
@ -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"]');
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 () => {
|
||||
|
|
Loading…
Add table
Reference in a new issue