Add Playwright E2E tests replacing Cypress with MSW integration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
167
tests/e2e/specs/sweetAlertModals.spec.ts
Normal file
167
tests/e2e/specs/sweetAlertModals.spec.ts
Normal file
@@ -0,0 +1,167 @@
|
||||
// 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("SweetAlert2 Modals", () => {
|
||||
test.describe("File Context Menu - Rename", () => {
|
||||
test.beforeEach(async ({ page, context }) => {
|
||||
await loginWithMSW(context);
|
||||
await page.goto("/files");
|
||||
await expect(page.getByText("sample-process.xes").first()).toBeVisible();
|
||||
});
|
||||
|
||||
test("right-click on table row shows context menu with Rename", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await expect(page.locator('.p-contextmenu-item-content', { hasText: 'Rename' }).first()).toBeVisible();
|
||||
});
|
||||
|
||||
test("right-click context menu shows Download option", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await expect(page.locator('.p-contextmenu-item-content', { hasText: 'Download' }).first()).toBeVisible();
|
||||
});
|
||||
|
||||
test("right-click context menu shows Delete option", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await expect(page.locator('.p-contextmenu-item-content', { hasText: 'Delete' }).first()).toBeVisible();
|
||||
});
|
||||
|
||||
test("clicking Rename opens SweetAlert rename dialog", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await page.locator('.p-contextmenu-item-content', { hasText: 'Rename' }).first().click();
|
||||
// SweetAlert popup should appear with RENAME title
|
||||
await expect(page.locator(".swal2-popup")).toBeVisible();
|
||||
await expect(
|
||||
page.locator(".swal2-title"),
|
||||
).toContainText("RENAME");
|
||||
await expect(page.locator(".swal2-input")).toBeVisible();
|
||||
});
|
||||
|
||||
test("rename dialog has pre-filled file name", async ({ page }) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await page.locator('.p-contextmenu-item-content', { hasText: 'Rename' }).first().click();
|
||||
const value = await page.locator(".swal2-input").inputValue();
|
||||
expect(value).not.toBe("");
|
||||
});
|
||||
|
||||
test("rename dialog can be cancelled", async ({ page }) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await page.locator('.p-contextmenu-item-content', { hasText: 'Rename' }).first().click();
|
||||
await expect(page.locator(".swal2-popup")).toBeVisible();
|
||||
await page.locator(".swal2-cancel").click();
|
||||
await expect(page.locator(".swal2-popup")).not.toBeVisible();
|
||||
});
|
||||
|
||||
test("clicking Delete opens SweetAlert delete confirmation", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await page.locator('.p-contextmenu-item-content', { hasText: 'Delete' }).first().click();
|
||||
// SweetAlert popup should appear with CONFIRM DELETION
|
||||
await expect(page.locator(".swal2-popup")).toBeVisible();
|
||||
await expect(
|
||||
page.locator(".swal2-title"),
|
||||
).toContainText("CONFIRM DELETION");
|
||||
});
|
||||
|
||||
test("delete confirmation shows file name", async ({ page }) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await page.locator('.p-contextmenu-item-content', { hasText: 'Delete' }).first().click();
|
||||
await expect(page.locator(".swal2-popup")).toBeVisible();
|
||||
await expect(
|
||||
page.locator(".swal2-html-container"),
|
||||
).toContainText("delete");
|
||||
});
|
||||
|
||||
test("delete confirmation can be cancelled", async ({ page }) => {
|
||||
await page
|
||||
.locator("table tbody tr")
|
||||
.first()
|
||||
.click({ button: "right" });
|
||||
await page.locator('.p-contextmenu-item-content', { hasText: 'Delete' }).first().click();
|
||||
await expect(page.locator(".swal2-popup")).toBeVisible();
|
||||
await page.locator(".swal2-cancel").click();
|
||||
await expect(page.locator(".swal2-popup")).not.toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe("File Context Menu on Grid View", () => {
|
||||
test.beforeEach(async ({ page, context }) => {
|
||||
await loginWithMSW(context);
|
||||
await page.goto("/files");
|
||||
await expect(page.getByText("sample-process.xes").first()).toBeVisible();
|
||||
// Switch to grid view
|
||||
await page.locator("li.cursor-pointer").last().click();
|
||||
});
|
||||
|
||||
test("right-click on grid card shows context menu", async ({ page }) => {
|
||||
await page.locator("li[title]").first().click({ button: "right" });
|
||||
await expect(page.locator('.p-contextmenu-item-content', { hasText: 'Rename' }).first()).toBeVisible();
|
||||
await expect(page.locator('.p-contextmenu-item-content', { hasText: 'Delete' }).first()).toBeVisible();
|
||||
});
|
||||
|
||||
test("grid card rename opens SweetAlert dialog", async ({ page }) => {
|
||||
await page.locator("li[title]").first().click({ button: "right" });
|
||||
await page.locator('.p-contextmenu-item-content', { hasText: 'Rename' }).first().click();
|
||||
await expect(page.locator(".swal2-popup")).toBeVisible();
|
||||
await expect(
|
||||
page.locator(".swal2-title"),
|
||||
).toContainText("RENAME");
|
||||
});
|
||||
});
|
||||
|
||||
test.describe("Account Delete Confirmation", () => {
|
||||
test.beforeEach(async ({ page, context }) => {
|
||||
await loginWithMSW(context);
|
||||
await page.goto("/account-admin");
|
||||
await expect(page.getByText("Test Admin").first()).toBeVisible();
|
||||
});
|
||||
|
||||
test("delete confirmation Yes button triggers delete API", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page.locator(".delete-account").first().click();
|
||||
await expect(page.locator("#modal_container")).toBeVisible();
|
||||
await page.locator("#sure_to_delete_acct_btn").click();
|
||||
// Modal should close after deletion
|
||||
await expect(
|
||||
page.locator("#modal_container"),
|
||||
).not.toBeVisible();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user