Skip to content

Commit 25246ef

Browse files
test: add e2e tests for filters on /insights/routing (calcom#21332)
* test: add e2e tests for insights routing filters Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: improve stability of insights routing filters e2e tests Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: address PR feedback for insights routing filters e2e tests Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: add explicit page navigation to resolve timeout issues in filters.e2e.ts Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: navigate to routing tab after loading insights page Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix e2e tests * fix tests * rename * fix tests --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: eunjae@cal.com <hey@eunjae.dev>
1 parent bb98143 commit 25246ef

6 files changed

Lines changed: 770 additions & 9 deletions

File tree

apps/web/playwright/filter-helpers.ts

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,65 @@ export async function selectFilter(page: Page, columnId: string) {
99
await page.getByTestId(`add-filter-item-${columnId}`).click();
1010
}
1111

12+
export async function openFilter(page: Page, columnId: string) {
13+
await page.getByTestId(`filter-popover-trigger-${columnId}`).click();
14+
}
15+
1216
/**
1317
* Apply a filter with a specific value
1418
*/
15-
export async function applyFilter(page: Page, columnId: string, value: string) {
19+
export async function applySelectFilter(page: Page, columnId: string, value: string) {
1620
const existingFilter = page.getByTestId(`filter-popover-trigger-${columnId}`);
1721
if (!(await existingFilter.isVisible())) {
1822
await selectFilter(page, columnId);
1923
}
24+
await openFilter(page, columnId);
25+
await selectOptionValue(page, columnId, value);
26+
await page.keyboard.press("Escape");
27+
}
2028

21-
await page.getByTestId(`filter-popover-trigger-${columnId}`).click();
22-
29+
export async function selectOptionValue(page: Page, columnId: string, value: string) {
2330
await page.getByTestId(`select-filter-options-${columnId}`).getByRole("option", { name: value }).click();
31+
}
32+
33+
export async function applyTextFilter(page: Page, columnId: string, operator: string, operand?: string) {
34+
const existingFilter = page.getByTestId(`filter-popover-trigger-${columnId}`);
35+
if (!(await existingFilter.isVisible())) {
36+
await selectFilter(page, columnId);
37+
}
38+
await openFilter(page, columnId);
39+
40+
await page.getByTestId(`text-filter-options-select-${columnId}`).click();
41+
await page
42+
.locator(`[data-testid="text-filter-options-${columnId}"] [id^="react-select-"]`)
43+
.getByText(operator)
44+
.first()
45+
.click();
46+
if (operand) {
47+
await page.keyboard.press("Tab");
48+
await page.keyboard.type(operand);
49+
}
50+
await page.keyboard.press("Enter");
51+
52+
await page.keyboard.press("Escape");
53+
}
54+
55+
export async function applyNumberFilter(page: Page, columnId: string, operator: string, operand: number) {
56+
const existingFilter = page.getByTestId(`filter-popover-trigger-${columnId}`);
57+
if (!(await existingFilter.isVisible())) {
58+
await selectFilter(page, columnId);
59+
}
60+
await openFilter(page, columnId);
61+
62+
await page.getByTestId(`number-filter-options-select-${columnId}`).click();
63+
await page
64+
.locator(`[data-testid="number-filter-options-${columnId}"] [id^="react-select-"]`)
65+
.getByText(operator)
66+
.first()
67+
.click();
68+
await page.keyboard.press("Tab");
69+
await page.keyboard.type(String(operand));
70+
await page.keyboard.press("Enter");
2471

2572
await page.keyboard.press("Escape");
2673
}

apps/web/playwright/filter-segment.e2e.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { expect } from "@playwright/test";
33
import { MembershipRole } from "@calcom/prisma/enums";
44

55
import {
6-
applyFilter,
6+
applySelectFilter,
77
createFilterSegment,
88
selectSegment,
99
deleteSegment,
@@ -56,7 +56,7 @@ test.describe("Filter Segment Functionality", () => {
5656
const segmentName = "Admin Users";
5757

5858
await test.step("Can apply and save a role filter as a segment", async () => {
59-
await applyFilter(page, "role", "admin");
59+
await applySelectFilter(page, "role", "admin");
6060

6161
await expect(page.getByText(adminUser.email)).toBeVisible();
6262
await expect(page.getByText(memberUser.email)).toBeHidden();
@@ -110,7 +110,7 @@ test.describe("Filter Segment Functionality", () => {
110110
const dataTable = page.getByTestId("user-list-data-table");
111111
await expect(dataTable).toBeVisible();
112112

113-
await applyFilter(page, "role", "admin");
113+
await applySelectFilter(page, "role", "admin");
114114
const segmentName = "Admin Users Persistent";
115115
await createFilterSegment(page, segmentName);
116116

@@ -158,7 +158,7 @@ test.describe("Filter Segment Functionality", () => {
158158
const segmentName = "Team Admin Filter";
159159

160160
await test.step("Can create a team scope filter segment", async () => {
161-
await applyFilter(page, "role", "admin");
161+
await applySelectFilter(page, "role", "admin");
162162

163163
await createFilterSegment(page, segmentName, {
164164
teamScope: true,

0 commit comments

Comments
 (0)