Files
calendar/apps/web/playwright/workflow.e2e.ts
T
1aa3077706 test: e2e for workflows (#9657)
* create test files

* add first e2e test

* finish first e2e test

* code clean up

* fix event type create button data-testid

* enable sandbox mode for non production environments

* comment out code for testing

* Revert "comment out code for testing"

This reverts commit 5553dacce23cd85c27e41b76f99fc31ce69499b7.

* clean up comments

* prettier

* use NEXT_PUBLIC_IS_E2E

* use todo fn

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Alan <alannnc@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Shivam Kalra <shivamkalra98@gmail.com>
2023-07-21 21:06:39 +05:30

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");
});
});