77 lines
2.5 KiB
TypeScript
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 { selectFirstAvailableTimeSlotNextMonth, 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 selectFirstAvailableTimeSlotNextMonth(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");
|
||
|
});
|
||
|
});
|