Spaces:
Running
Running
| // Test the graph creation box in LynxKite | |
| 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(), | |
| "graph_creation_spec_test", | |
| ); | |
| await workspace.addBox("NX › Scale-Free Graph"); | |
| await workspace | |
| .getBox("NX › Scale-Free Graph 1") | |
| .getByLabel("n", { exact: true }) | |
| .fill("10"); | |
| await workspace.addBox("Create graph"); | |
| await workspace.connectBoxes("NX › Scale-Free Graph 1", "Create graph 1"); | |
| }); | |
| 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("graph_creation_spec_test"); | |
| }); | |
| test("Tables are displayed in the Graph creation box", async () => { | |
| const graphBox = await workspace.getBox("Create graph 1"); | |
| const nodesTableHeader = await graphBox.locator(".graph-tables .df-head", { | |
| hasText: "nodes", | |
| }); | |
| const edgesTableHeader = await graphBox.locator(".graph-tables .df-head", { | |
| hasText: "edges", | |
| }); | |
| await expect(nodesTableHeader).toBeVisible(); | |
| await expect(edgesTableHeader).toBeVisible(); | |
| nodesTableHeader.click(); | |
| await expect(graphBox.locator("#nodes-table")).toBeVisible(); | |
| edgesTableHeader.click(); | |
| await expect(graphBox.locator("#edges-table")).toBeVisible(); | |
| }); | |
| test("Adding and removing relationships", async () => { | |
| const graphBox = await workspace.getBox("Create graph 1"); | |
| const addRelationshipButton = await graphBox.locator( | |
| ".add-relationship-button", | |
| ); | |
| await addRelationshipButton.click(); | |
| const formData: Record<string, string> = { | |
| name: "relation_1", | |
| df: "edges", | |
| source_column: "source_id", | |
| target_column: "target_id", | |
| source_table: "nodes", | |
| target_table: "nodes", | |
| source_key: "node_id", | |
| target_key: "node_id", | |
| }; | |
| for (const [fieldName, fieldValue] of Object.entries(formData)) { | |
| const inputField = await graphBox.locator( | |
| `.graph-relation-attributes input[name="${fieldName}"]`, | |
| ); | |
| await inputField.fill(fieldValue); | |
| } | |
| await graphBox.locator(".submit-relationship-button").click(); | |
| // check that the relationship has been saved in the backend | |
| await workspace.page.reload(); | |
| const graphBoxAfterReload = await workspace.getBox("Create graph 1"); | |
| const relationHeader = await graphBoxAfterReload.locator( | |
| ".graph-relations .df-head", | |
| { hasText: "relation_1" }, | |
| ); | |
| await expect(relationHeader).toBeVisible(); | |
| await relationHeader.locator("button").click(); // Delete the relationship | |
| await expect(relationHeader).not.toBeVisible(); | |
| }); | |
| test("Output of the box is a bundle", async () => { | |
| await workspace.addBox("View tables"); | |
| const tableView = await workspace.getBox("View tables 1"); | |
| await workspace.connectBoxes("Create graph 1", "View tables 1"); | |
| const nodesTableHeader = await tableView.locator(".df-head", { | |
| hasText: "nodes", | |
| }); | |
| const edgesTableHeader = await tableView.locator(".df-head", { | |
| hasText: "edges", | |
| }); | |
| await expect(nodesTableHeader).toBeVisible(); | |
| await expect(edgesTableHeader).toBeVisible(); | |
| }); | |