cal.pub0.org/apps/web/playwright/workflow.e2e.ts

77 lines
2.5 KiB
TypeScript

import { expect } from "@playwright/test";
import dayjs from "@calcom/dayjs";
import prisma from "@calcom/prisma";
import { WorkflowMethods } from "@calcom/prisma/enums";
import { test } from "./lib/fixtures";
import { selectSecondAvailableTimeSlotNextMonth, todo } from "./lib/testUtils";
test.afterEach(({ users }) => users.deleteAll());
test.describe("Workflow tests", () => {
test.describe("User Workflows", () => {
test("Create default reminder workflow & trigger when event type is booked", async ({ page, users }) => {
const user = await users.create();
const [eventType] = user.eventTypes;
await user.login();
await page.goto(`/workflows`);
await page.click('[data-testid="create-button"]');
// select first event type
await page.getByText("Select...").click();
await page.getByText(eventType.title, { exact: true }).click();
// name workflow
await page.fill('[data-testid="workflow-name"]', "Test workflow");
// save workflow
await page.click('[data-testid="save-workflow"]');
// check if workflow is saved
await expect(page.locator('[data-testid="workflow-list"] > li')).toHaveCount(1);
// book event type
await page.goto(`/${user.username}/${eventType.slug}`);
await selectSecondAvailableTimeSlotNextMonth(page);
await page.fill('[name="name"]', "Test");
await page.fill('[name="email"]', "test@example.com");
await page.press('[name="email"]', "Enter");
// Make sure booking is completed
await expect(page.locator("[data-testid=success-page]")).toBeVisible();
const booking = await prisma.booking.findFirst({
where: {
eventTypeId: eventType.id,
},
});
// check if workflow triggered
const workflowReminders = await prisma.workflowReminder.findMany({
where: {
bookingUid: booking?.uid ?? "",
},
});
expect(workflowReminders).toHaveLength(1);
const scheduledDate = dayjs(booking?.startTime).subtract(1, "day").toDate();
expect(workflowReminders[0].method).toBe(WorkflowMethods.EMAIL);
expect(workflowReminders[0].scheduledDate.toISOString()).toBe(scheduledDate.toISOString());
});
// add all other actions to this workflow and test if they triggered
// cancel booking and test if workflow reminders are deleted
// test all other triggers
});
test.describe("Team Workflows", () => {
todo("Admin can create and update team workflow");
todo("Members can not create and update team workflows");
});
});