Add Playwright E2E tests replacing Cypress with MSW integration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
104
tests/e2e/specs/filesToDiscover.spec.ts
Normal file
104
tests/e2e/specs/filesToDiscover.spec.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
// The Lucia project.
|
||||
// Copyright 2026-2026 DSP, inc. All rights reserved.
|
||||
// Authors:
|
||||
// imacat.yang@dsp.im (imacat), 2026/03/22
|
||||
|
||||
import { test, expect } from "@playwright/test";
|
||||
import { loginWithMSW } from "../helpers";
|
||||
|
||||
test.describe("Files to Discover Entry Flow", () => {
|
||||
test.beforeEach(async ({ page, context }) => {
|
||||
await loginWithMSW(context);
|
||||
await page.goto("/files");
|
||||
await expect(page.getByText("sample-process.xes").first()).toBeVisible();
|
||||
});
|
||||
|
||||
test.describe("double-click table row to enter Discover", () => {
|
||||
test("double-click log file navigates to Map page", async ({ page }) => {
|
||||
// Target the Name column (has class .fileName) to avoid matching Dependency column
|
||||
await page
|
||||
.locator("td.fileName", { hasText: "sample-process.xes" })
|
||||
.locator("..")
|
||||
.dblclick();
|
||||
await expect(page).toHaveURL(/\/discover\/log\/1\/map/);
|
||||
await expect(page.locator("#cy")).toBeVisible();
|
||||
});
|
||||
|
||||
test("double-click filter file navigates to Map page", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page
|
||||
.locator("td.fileName", { hasText: "filtered-sample" })
|
||||
.locator("..")
|
||||
.dblclick();
|
||||
await expect(page).toHaveURL(/\/discover\/filter\/10\/map/);
|
||||
await expect(page.locator("#cy")).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe("double-click to enter Discover from file list", () => {
|
||||
test("double-click log file navigates to Map page", async ({
|
||||
page,
|
||||
}) => {
|
||||
// Find the row with "production-log.csv" (a pure log, no parent ambiguity)
|
||||
await page
|
||||
.locator("table tbody tr", { hasText: "production-log.csv" })
|
||||
.first()
|
||||
.dblclick();
|
||||
await expect(page).toHaveURL(/\/discover\/log\/.*\/map/);
|
||||
await expect(page.locator("#cy")).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe("DISCOVER tab filters files", () => {
|
||||
test("clicking DISCOVER tab shows only Log, Filter, and Rule files", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page.locator(".nav-item", { hasText: "DISCOVER" }).click();
|
||||
await expect(
|
||||
page.locator("td.fileName", { hasText: "sample-process.xes" }),
|
||||
).toBeVisible();
|
||||
await expect(
|
||||
page.locator("td.fileName", { hasText: "filtered-sample" }),
|
||||
).toBeVisible();
|
||||
await expect(
|
||||
page.locator("td.fileName", { hasText: "conformance-check-1" }),
|
||||
).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe("Navbar state after entering Discover", () => {
|
||||
test("shows DISCOVER heading and tabs after entering from Files", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page
|
||||
.locator("td.fileName", { hasText: "sample-process.xes" })
|
||||
.locator("..")
|
||||
.dblclick();
|
||||
await expect(page).toHaveURL(/\/discover\//);
|
||||
await expect(
|
||||
page.locator("#nav_bar", { hasText: "DISCOVER" }),
|
||||
).toBeVisible();
|
||||
await expect(
|
||||
page.locator(".nav-item", { hasText: "MAP" }),
|
||||
).toBeVisible();
|
||||
await expect(
|
||||
page.locator(".nav-item", { hasText: "CONFORMANCE" }),
|
||||
).toBeVisible();
|
||||
await expect(
|
||||
page.locator(".nav-item", { hasText: "PERFORMANCE" }),
|
||||
).toBeVisible();
|
||||
});
|
||||
|
||||
test("shows back arrow pointing to /files", async ({ page }) => {
|
||||
await page
|
||||
.locator("td.fileName", { hasText: "sample-process.xes" })
|
||||
.locator("..")
|
||||
.dblclick();
|
||||
await expect(page).toHaveURL(/\/discover\//);
|
||||
await expect(
|
||||
page.locator("#backPage"),
|
||||
).toHaveAttribute("href", "/files");
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user