fix: implement locked flow interaction restrictions (#8645)
* 📝 (handleRenderComponent/index.tsx): Add useShallow import for zustand/react/shallow to optimize re-renders 📝 (handleRenderComponent/index.tsx): Introduce isLocked state to handle locked flow functionality 📝 (handleRenderComponent/index.tsx): Update tooltip visibility based on isLocked state 📝 (handleRenderComponent/index.tsx): Update handle style based on isLocked state 📝 (PageComponent/index.tsx): Add useShallow import for zustand/react/shallow to optimize re-renders 📝 (PageComponent/index.tsx): Introduce isLocked state to handle locked flow functionality 📝 (PageComponent/index.tsx): Prevent edge click actions when flow is locked 📝 (PageComponent/index.tsx): Disable edge actions when flow is locked 📝 (PageComponent/index.tsx): Update edge actions based on isLocked state 📝 (lock-flow.spec.ts): Add test to simulate deleting edges when flow is locked * ✨ (lock-flow.spec.ts): add functionality to try connecting nodes and handle edge cases when connecting nodes in the flow diagram.
This commit is contained in:
parent
8f4d1cb902
commit
30a0f11448
3 changed files with 120 additions and 14 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import { test } from "@playwright/test";
|
||||
import { expect, Page, test } from "@playwright/test";
|
||||
import * as dotenv from "dotenv";
|
||||
import path from "path";
|
||||
import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
|
||||
|
|
@ -74,5 +74,99 @@ test(
|
|||
timeout: 3000,
|
||||
state: "visible",
|
||||
});
|
||||
|
||||
await tryDeleteEdge(page);
|
||||
await page.locator(".react-flow__edge-path").nth(0).click();
|
||||
await page.keyboard.press("Delete");
|
||||
let numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
expect(numberOfEdges).toBe(2);
|
||||
|
||||
await page.locator(".react-flow__edge-path").nth(0).click();
|
||||
await page.keyboard.press("Delete");
|
||||
numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
expect(numberOfEdges).toBe(1);
|
||||
|
||||
await page.locator(".react-flow__edge-path").nth(0).click();
|
||||
await page.keyboard.press("Delete");
|
||||
numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
expect(numberOfEdges).toBe(0);
|
||||
|
||||
await tryConnectNodes(page);
|
||||
|
||||
await page.getByTestId("handle-prompt-shownode-prompt-right").click();
|
||||
await page
|
||||
.getByTestId("handle-languagemodelcomponent-shownode-system message-left")
|
||||
.click();
|
||||
|
||||
await page
|
||||
.getByTestId("handle-chatinput-shownode-chat message-right")
|
||||
.click();
|
||||
await page
|
||||
.getByTestId("handle-languagemodelcomponent-shownode-input-left")
|
||||
.click();
|
||||
|
||||
await page
|
||||
.getByTestId(
|
||||
"handle-languagemodelcomponent-shownode-model response-right",
|
||||
)
|
||||
.click();
|
||||
await page.getByTestId("handle-chatoutput-shownode-inputs-left").click();
|
||||
numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
|
||||
expect(numberOfEdges).toBe(3);
|
||||
},
|
||||
);
|
||||
|
||||
async function tryConnectNodes(page: Page) {
|
||||
await page.getByTestId("lock_unlock").click();
|
||||
|
||||
const numberOfTries = 5;
|
||||
let numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
|
||||
for (let i = 0; i < numberOfTries; i++) {
|
||||
try {
|
||||
await page.getByTestId("handle-prompt-shownode-prompt-right").click({
|
||||
timeout: 500,
|
||||
});
|
||||
} catch (e) {
|
||||
numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
expect(numberOfEdges).toBe(0);
|
||||
}
|
||||
|
||||
try {
|
||||
await page
|
||||
.getByTestId(
|
||||
"handle-languagemodelcomponent-shownode-system message-left",
|
||||
)
|
||||
.click({
|
||||
timeout: 500,
|
||||
});
|
||||
} catch (e) {
|
||||
numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
expect(numberOfEdges).toBe(0);
|
||||
}
|
||||
}
|
||||
|
||||
await page.getByTestId("lock_unlock").click();
|
||||
}
|
||||
|
||||
async function tryDeleteEdge(page: Page) {
|
||||
await page.getByTestId("lock_unlock").click();
|
||||
|
||||
let numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
expect(numberOfEdges).toBe(3);
|
||||
const numberOfTries = 50;
|
||||
|
||||
for (let i = 0; i < numberOfTries; i++) {
|
||||
await page.locator(".react-flow__edge-path").nth(0).click();
|
||||
await page.keyboard.press("Delete");
|
||||
await page.locator(".react-flow__edge-path").nth(1).click();
|
||||
await page.keyboard.press("Delete");
|
||||
await page.locator(".react-flow__edge-path").nth(2).click();
|
||||
await page.keyboard.press("Delete");
|
||||
numberOfEdges = await page.locator(".react-flow__edge-path").count();
|
||||
expect(numberOfEdges).toBe(3);
|
||||
}
|
||||
//unlock the flow
|
||||
await page.getByTestId("lock_unlock").click();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue