Files
event-manager/e2e/tests/guest-booking.spec.ts
T
xadm 786cbc724f
CI / Server (push) Has been cancelled
Linters / Frappe Linter (push) Has been cancelled
Linters / Vulnerable Dependency Check (push) Has been cancelled
UI Tests / Playwright E2E Tests (push) Has been cancelled
Initialize fork and rebrand app to event_manager
2026-05-11 09:56:57 +02:00

103 lines
4.3 KiB
TypeScript

import { test, expect } from "@playwright/test";
import { BookingPage } from "../pages";
// Unique suffix per run to avoid rate limits
const uid = Date.now();
test.describe("Guest Booking UX", () => {
test("guest details auto-fill to Attendee 1", async ({ page }) => {
const bookingPage = new BookingPage(page);
await bookingPage.goto("guest-no-otp-e2e");
await bookingPage.waitForFormLoad();
await page.locator('input[placeholder="Enter your first name"]').fill("Test");
await page.locator('input[placeholder="Enter your last name"]').fill("Guest");
await page.locator('input[placeholder="Enter your email"]').fill("test@example.com");
await page.locator('input[placeholder="Enter your email"]').blur();
await expect(page.locator('input[placeholder="Enter first name"]').first()).toHaveValue("Test");
await expect(page.locator('input[placeholder="Enter last name"]').first()).toHaveValue("Guest");
await expect(page.locator('input[placeholder="Enter email address"]').first()).toHaveValue("test@example.com");
});
});
test.describe("Guest Booking", () => {
test("guest booking without OTP", async ({ page }) => {
const email = `guest-no-otp-${uid}@test.com`;
const bookingPage = new BookingPage(page);
await bookingPage.goto("guest-no-otp-e2e");
await bookingPage.waitForFormLoad();
await page.locator('input[placeholder="Enter your first name"]').fill("Test");
await page.locator('input[placeholder="Enter your last name"]').fill("Guest");
await page.locator('input[placeholder="Enter your email"]').fill(email);
await page.locator('input[placeholder="Enter your email"]').blur();
await bookingPage.submit();
await expect(page.getByText("Booking Confirmed!")).toBeVisible({ timeout: 30000 });
});
test("guest booking with Email OTP", async ({ page }) => {
const email = `guest-email-otp-${uid}@test.com`;
const bookingPage = new BookingPage(page);
await bookingPage.goto("guest-email-otp-e2e");
await bookingPage.waitForFormLoad();
await page.locator('input[placeholder="Enter your first name"]').fill("Test");
await page.locator('input[placeholder="Enter your last name"]').fill("Guest Email");
await page.locator('input[placeholder="Enter your email"]').fill(email);
await page.locator('input[placeholder="Enter your email"]').blur();
const otpResponsePromise = page.waitForResponse(
(resp) => resp.url().includes("send_guest_booking_otp") && resp.status() === 200,
);
await bookingPage.submit();
const otpResponse = await otpResponsePromise;
const otpData = (await otpResponse.json()) as { message?: { otp?: string } };
const otp = otpData.message?.otp;
expect(otp).toBeTruthy();
await expect(page.getByText("Verify Your Email")).toBeVisible({ timeout: 10000 });
await page.locator('input[placeholder="123456"]').fill(otp!);
await page.getByRole("button", { name: "Verify & Book" }).click();
await expect(page.getByText("Booking Confirmed!")).toBeVisible({ timeout: 30000 });
});
test("guest booking with Phone OTP", async ({ page }) => {
const email = `guest-phone-otp-${uid}@test.com`;
const phone = `9${uid.toString().slice(-9)}`;
const bookingPage = new BookingPage(page);
await bookingPage.goto("guest-phone-otp-e2e");
await bookingPage.waitForFormLoad();
await page.locator('input[placeholder="Enter your first name"]').fill("Test");
await page.locator('input[placeholder="Enter your last name"]').fill("Guest Phone");
await page.locator('input[placeholder="Enter your email"]').fill(email);
await page.locator('input[placeholder="Enter your email"]').blur(); // triggers auto-fill
await page.locator('input[placeholder="Enter your phone number"]').fill(phone);
const otpResponsePromise = page.waitForResponse(
(resp) => resp.url().includes("send_guest_booking_otp") && resp.status() === 200,
);
await bookingPage.submit();
const otpResponse = await otpResponsePromise;
const otpData = (await otpResponse.json()) as { message?: { otp?: string } };
const otp = otpData.message?.otp;
expect(otp).toBeTruthy();
await expect(page.getByText("Verify Your Phone")).toBeVisible({ timeout: 10000 });
await page.locator('input[placeholder="123456"]').fill(otp!);
await page.getByRole("button", { name: "Verify & Book" }).click();
await expect(page.getByText("Booking Confirmed!")).toBeVisible({ timeout: 30000 });
});
});