import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; // Test uploading a file in an import box. import { expect, test } from "@playwright/test"; import { Splash, Workspace } from "./lynxkite"; let workspace: Workspace; test.beforeEach(async ({ browser }) => { workspace = await Workspace.empty( await browser.newPage(), "import_spec_test", ); }); test.afterEach(async () => { await workspace.close(); const splash = await new Splash(workspace.page); splash.page.on("dialog", async (dialog) => { await dialog.accept(); }); await splash.deleteEntry("import_spec_test"); }); async function validateImport( workspace: Workspace, fileName: string, fileFormat: string, ) { const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const filePath = join(__dirname, "data", fileName); await workspace.addBox("Import file"); const importBox = workspace.getBox("Import file 1"); const fileFormatSelect = await importBox .locator("label.param", { hasText: "file format" }) .locator("select"); await fileFormatSelect.selectOption(fileFormat); const filePathInput = await importBox .locator("label.param", { hasText: "file path" }) .locator("input"); await filePathInput.click(); await filePathInput.fill(filePath); await filePathInput.press("Enter"); const tableNameInput = await importBox .locator("label.param", { hasText: "table name" }) .locator("input"); await tableNameInput.click(); await tableNameInput.fill("table"); await tableNameInput.press("Enter"); await workspace.addBox("View tables"); const tableBox = workspace.getBox("View tables 1"); await workspace.connectBoxes("Import file 1", "View tables 1"); const tableRows = tableBox.locator("table tbody tr"); await expect(tableRows).toHaveCount(4); } test("Can import a CSV file", async () => { await validateImport(workspace, "import_test.csv", "csv"); }); test("Can import a parquet file", async () => { await validateImport(workspace, "import_test.parquet", "parquet"); }); test("Can import a JSON file", async () => { await validateImport(workspace, "import_test.json", "json"); }); test("Can import an Excel file", async () => { await validateImport(workspace, "import_test.xlsx", "excel"); });