// 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("File Operations", () => { test.beforeEach(async ({ page, context }) => { await loginWithMSW(context); await page.goto("/files"); await expect(page.getByText("sample-process.xes").first()).toBeVisible(); }); test("file list table has sortable columns", async ({ page }) => { // Check that table headers exist with expected columns const table = page.locator("table"); await expect( table.locator("th", { hasText: "Name" }), ).toBeVisible(); await expect( table.locator("th", { hasText: "Dependency" }), ).toBeVisible(); await expect( table.locator("th", { hasText: "File Type" }), ).toBeVisible(); await expect( table.locator("th", { hasText: "Owner" }), ).toBeVisible(); await expect( table.locator("th", { hasText: "Last Update" }), ).toBeVisible(); }); test("clicking column header sorts the table", async ({ page }) => { // Click "Name" header to sort await page.locator("th", { hasText: "Name" }).click(); // After sorting, table should still have data const rows = page.locator("table tbody tr"); await expect(rows).not.toHaveCount(0); }); test("table rows show file data from fixture", async ({ page }) => { const tbody = page.locator("table tbody"); await expect( tbody.getByText("sample-process.xes").first(), ).toBeVisible(); await expect(tbody.getByText("filtered-sample").first()).toBeVisible(); await expect( tbody.getByText("production-log.csv").first(), ).toBeVisible(); }); test("table shows owner names", async ({ page }) => { const tbody = page.locator("table tbody"); await expect(tbody.getByText("Test Admin").first()).toBeVisible(); await expect(tbody.getByText("Alice Wang")).toBeVisible(); }); test("table shows file types", async ({ page }) => { const tbody = page.locator("table tbody"); await expect(tbody.getByText("log").first()).toBeVisible(); }); test("right-click on file row shows context menu", async ({ page }) => { // PrimeVue DataTable with contextmenu await page.locator("table tbody tr").first().click({ button: "right" }); // Context menu behavior depends on implementation // Just verify the right-click doesn't break anything const rows = page.locator("table tbody tr"); await expect(rows).not.toHaveCount(0); }); test("grid view shows file cards", async ({ page }) => { // Switch to grid view await page.locator("li.cursor-pointer").last().click(); // Grid cards should be visible const cards = page.locator("li[title]"); await expect(cards).not.toHaveCount(0); }); test("Import button opens upload modal", async ({ page }) => { await page.locator("#import_btn").click(); // Upload modal should appear await expect(page.locator("#import_btn")).toBeVisible(); }); });