mirror of
https://github.com/lukevella/rallly.git
synced 2025-04-30 10:46:35 +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 }) => {
|
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,
|
||||||
|
|
|
@ -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");
|
||||||
});
|
});
|
||||||
|
|
|
@ -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();
|
||||||
});
|
});
|
||||||
|
|
|
@ -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");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
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");
|
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"]');
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 () => {
|
||||||
|
|
Loading…
Add table
Reference in a new issue