Spaces:
Running
Running
import { expect, test } from "@playwright/test"; | |
test( | |
"should be able to see output preview from grouped components and connect components with a single click", | |
{ tag: ["@release", "@workspace", "@components"] }, | |
async ({ page }) => { | |
await page.goto("/"); | |
let modalCount = 0; | |
const randomName = Math.random().toString(36).substring(2); | |
const secondRandomName = Math.random().toString(36).substring(2); | |
const thirdRandomName = Math.random().toString(36).substring(2); | |
try { | |
const modalTitleElement = page?.getByTestId("modal-title"); | |
if (modalTitleElement) { | |
modalCount = await modalTitleElement.count(); | |
} | |
} catch (error) { | |
modalCount = 0; | |
} | |
while (modalCount === 0) { | |
await page.getByText("New Flow", { exact: true }).click(); | |
await page.waitForSelector('[data-testid="modal-title"]', { | |
timeout: 3000, | |
}); | |
modalCount = await page.getByTestId("modal-title")?.count(); | |
} | |
await page.waitForSelector('[data-testid="blank-flow"]', { | |
timeout: 30000, | |
}); | |
await page.getByTestId("blank-flow").click(); | |
await page.getByTestId("sidebar-search-input").click(); | |
await page.getByTestId("sidebar-search-input").fill("text input"); | |
await page.waitForSelector('[data-testid="inputsText Input"]', { | |
timeout: 3000, | |
}); | |
await page | |
.getByTestId("inputsText Input") | |
.dragTo(page.locator('//*[@id="react-flow-id"]'), {}); | |
await page.getByTestId("zoom_out").click(); | |
await page.getByTestId("zoom_out").click(); | |
await page.getByTestId("zoom_out").click(); | |
await page.getByTestId("zoom_out").click(); | |
await page | |
.getByTestId("inputsText Input") | |
.dragTo(page.locator('//*[@id="react-flow-id"]'), { | |
targetPosition: { x: 500, y: 150 }, | |
}); | |
await page.getByTestId("sidebar-search-input").click(); | |
await page.getByTestId("sidebar-search-input").fill("combine text"); | |
await page.waitForSelector('[data-testid="processingCombine Text"]', { | |
timeout: 3000, | |
}); | |
await page | |
.getByTestId("processingCombine Text") | |
.dragTo(page.locator('//*[@id="react-flow-id"]'), { | |
targetPosition: { x: 10, y: 10 }, | |
}); | |
await page | |
.getByTestId("processingCombine Text") | |
.dragTo(page.locator('//*[@id="react-flow-id"]'), { | |
targetPosition: { x: 200, y: 10 }, | |
}); | |
await page.getByTestId("sidebar-search-input").click(); | |
await page.getByTestId("sidebar-search-input").fill("text"); | |
await page.waitForSelector('[data-testid="outputsText Output"]', { | |
timeout: 3000, | |
}); | |
await page | |
.getByTestId("outputsText Output") | |
.dragTo(page.locator('//*[@id="react-flow-id"]'), { | |
targetPosition: { x: 10, y: 400 }, | |
}); | |
//connection 1 | |
const elementCombineTextOutput0 = page | |
.getByTestId("div-handle-combinetext-shownode-combined text-right") | |
.nth(0); | |
await elementCombineTextOutput0.click(); | |
const blockedHandle = page | |
.getByTestId("div-handle-textinput-shownode-text-right") | |
.first(); | |
const secondBlockedHandle = page | |
.getByTestId("div-handle-combinetext-shownode-combined text-right") | |
.nth(3); | |
const thirdBlockedHandle = page | |
.getByTestId("div-handle-textoutput-shownode-text-right") | |
.first(); | |
const hasGradient = await blockedHandle?.evaluate((el) => { | |
const style = window.getComputedStyle(el); | |
return style.backgroundColor === "rgb(228, 228, 231)"; | |
}); | |
const secondHasGradient = await secondBlockedHandle?.evaluate((el) => { | |
const style = window.getComputedStyle(el); | |
return style.backgroundColor === "rgb(228, 228, 231)"; | |
}); | |
const thirdHasGradient = await thirdBlockedHandle?.evaluate((el) => { | |
const style = window.getComputedStyle(el); | |
return style.backgroundColor === "rgb(228, 228, 231)"; | |
}); | |
expect(hasGradient).toBe(true); | |
expect(secondHasGradient).toBe(true); | |
expect(thirdHasGradient).toBe(true); | |
const unlockedHandle = page | |
.getByTestId("div-handle-textinput-shownode-text-left") | |
.last(); | |
const secondUnlockedHandle = page | |
.getByTestId("div-handle-combinetext-shownode-second text-left") | |
.last(); | |
const thirdUnlockedHandle = page | |
.getByTestId("div-handle-combinetext-shownode-second text-left") | |
.first(); | |
const fourthUnlockedHandle = page | |
.getByTestId("div-handle-textoutput-shownode-text-left") | |
.first(); | |
const hasGradientUnlocked = await unlockedHandle?.evaluate((el) => { | |
const style = window.getComputedStyle(el); | |
return ( | |
style.backgroundImage.includes("conic-gradient") && | |
style.backgroundImage.includes("rgb(79, 70, 229)") | |
); | |
}); | |
const secondHasGradientUnlocked = await secondUnlockedHandle?.evaluate( | |
(el) => { | |
const style = window.getComputedStyle(el); | |
return ( | |
style.backgroundImage.includes("conic-gradient") && | |
style.backgroundImage.includes("rgb(79, 70, 229)") | |
); | |
}, | |
); | |
const thirdHasGradientLocked = await thirdUnlockedHandle?.evaluate((el) => { | |
const style = window.getComputedStyle(el); | |
return style.backgroundColor === "rgb(228, 228, 231)"; | |
}); | |
const fourthHasGradientUnlocked = await fourthUnlockedHandle?.evaluate( | |
(el) => { | |
const style = window.getComputedStyle(el); | |
return ( | |
style.backgroundImage.includes("conic-gradient") && | |
style.backgroundImage.includes("rgb(79, 70, 229)") | |
); | |
}, | |
); | |
expect(hasGradientUnlocked).toBe(true); | |
expect(secondHasGradientUnlocked).toBe(true); | |
expect(thirdHasGradientLocked).toBe(true); | |
expect(fourthHasGradientUnlocked).toBe(true); | |
const elementCombineTextInput1 = await page | |
.getByTestId("handle-combinetext-shownode-first text-left") | |
.nth(1); | |
await elementCombineTextInput1.click(); | |
await page | |
.getByTestId("title-Combine Text") | |
.first() | |
.click({ modifiers: ["Control"] }); | |
await page | |
.getByTestId("title-delimiter") | |
.last() | |
.click({ modifiers: ["Control"] }); | |
await page.getByRole("button", { name: "Group" }).click(); | |
await page.getByTitle("fit view").click(); | |
//connection 2 | |
const elementTextOutput0 = page | |
.getByTestId("handle-textinput-shownode-text-right") | |
.nth(0); | |
await elementTextOutput0.click(); | |
const elementGroupInput0 = page.getByTestId( | |
"handle-groupnode-shownode-first text-left", | |
); | |
await elementGroupInput0.click(); | |
//connection 3 | |
const elementTextOutput1 = page | |
.getByTestId("handle-textinput-shownode-text-right") | |
.nth(2); | |
await elementTextOutput1.click(); | |
const elementGroupInput1 = page | |
.getByTestId("handle-groupnode-shownode-second text-left") | |
.nth(1); | |
await elementGroupInput1.click(); | |
//connection 4 | |
const elementGroupOutput = page | |
.getByTestId("handle-groupnode-shownode-combined text-right") | |
.nth(0); | |
await elementGroupOutput.click(); | |
const elementTextOutputInput = page | |
.getByTestId("handle-textoutput-shownode-text-left") | |
.nth(0); | |
await elementTextOutputInput.click(); | |
await page.getByTestId("textarea_str_input_value").nth(0).fill(randomName); | |
await page | |
.getByTestId("textarea_str_input_value") | |
.nth(1) | |
.fill(secondRandomName); | |
await page | |
.getByPlaceholder("Type something...", { exact: true }) | |
.nth(4) | |
.fill(thirdRandomName); | |
await page | |
.getByPlaceholder("Type something...", { exact: true }) | |
.nth(3) | |
.fill("-"); | |
await page | |
.getByPlaceholder("Type something...", { exact: true }) | |
.nth(2) | |
.fill("-"); | |
await page.getByTestId("button_run_text output").last().click(); | |
await page.waitForSelector("text=built successfully", { timeout: 30000 }); | |
await page.getByText("built successfully").last().click({ | |
timeout: 15000, | |
}); | |
expect( | |
await page.getByTestId("output-inspection-combined text").first(), | |
).not.toBeDisabled(); | |
await page.getByTestId("output-inspection-combined text").first().click(); | |
await page.getByText("Component Output").isVisible(); | |
const text = await page.getByPlaceholder("Empty").textContent(); | |
const permutations = [ | |
`${randomName}-${secondRandomName}-${thirdRandomName}`, | |
`${randomName}-${thirdRandomName}-${secondRandomName}`, | |
`${thirdRandomName}-${randomName}-${secondRandomName}`, | |
`${thirdRandomName}-${secondRandomName}-${randomName}`, | |
`${secondRandomName}-${randomName}-${thirdRandomName}`, | |
`${secondRandomName}-${thirdRandomName}-${randomName}`, | |
]; | |
const isPermutationIncluded = permutations.some((permutation) => | |
text!.includes(permutation), | |
); | |
expect(isPermutationIncluded).toBe(true); | |
}, | |
); | |