{lang?.name}
diff --git a/src/frontend/src/utils/utils.ts b/src/frontend/src/utils/utils.ts
index 95b1897ca..3f90be599 100644
--- a/src/frontend/src/utils/utils.ts
+++ b/src/frontend/src/utils/utils.ts
@@ -47,9 +47,9 @@ export function toNormalCase(str: string): string {
.split("_")
.map((word, index) => {
if (index === 0) {
- return word[0].toUpperCase() + word.slice(1).toLowerCase();
+ return word[0]?.toUpperCase() + word.slice(1)?.toLowerCase();
}
- return word.toLowerCase();
+ return word?.toLowerCase();
})
.join(" ");
@@ -57,9 +57,9 @@ export function toNormalCase(str: string): string {
.split("-")
.map((word, index) => {
if (index === 0) {
- return word[0].toUpperCase() + word.slice(1).toLowerCase();
+ return word[0]?.toUpperCase() + word.slice(1)?.toLowerCase();
}
- return word.toLowerCase();
+ return word?.toLowerCase();
})
.join(" ");
}
@@ -69,11 +69,11 @@ export function normalCaseToSnakeCase(str: string): string {
.split(" ")
.map((word, index) => {
if (index === 0) {
- return word[0].toUpperCase() + word.slice(1).toLowerCase();
+ return word[0]?.toUpperCase() + word.slice(1)?.toLowerCase();
}
- return word.toLowerCase();
+ return word?.toLowerCase();
})
- .join("_");
+ ?.join("_");
}
export function toTitleCase(
@@ -82,41 +82,41 @@ export function toTitleCase(
): string {
if (!str) return "";
let result = str
- .split("_")
- .map((word, index) => {
+ ?.split("_")
+ ?.map((word, index) => {
if (isNodeField) return word;
if (index === 0) {
return checkUpperWords(
- word[0].toUpperCase() + word.slice(1).toLowerCase(),
+ word[0]?.toUpperCase() + word.slice(1)?.toLowerCase(),
);
}
- return checkUpperWords(word.toLowerCase());
+ return checkUpperWords(word?.toLowerCase());
})
.join(" ");
return result
- .split("-")
- .map((word, index) => {
+ ?.split("-")
+ ?.map((word, index) => {
if (isNodeField) return word;
if (index === 0) {
return checkUpperWords(
- word[0].toUpperCase() + word.slice(1).toLowerCase(),
+ word[0]?.toUpperCase() + word.slice(1)?.toLowerCase(),
);
}
- return checkUpperWords(word.toLowerCase());
+ return checkUpperWords(word?.toLowerCase());
})
- .join(" ");
+ ?.join(" ");
}
export const upperCaseWords: string[] = ["llm", "uri"];
export function checkUpperWords(str: string): string {
- const words = str.split(" ").map((word) => {
- return upperCaseWords.includes(word.toLowerCase())
- ? word.toUpperCase()
- : word[0].toUpperCase() + word.slice(1).toLowerCase();
+ const words = str?.split(" ")?.map((word) => {
+ return upperCaseWords.includes(word?.toLowerCase())
+ ? word?.toUpperCase()
+ : word[0]?.toUpperCase() + word.slice(1)?.toLowerCase();
});
- return words.join(" ");
+ return words?.join(" ");
}
export function buildInputs(): string {
diff --git a/src/frontend/tests/core/features/auto-login-off.spec.ts b/src/frontend/tests/core/features/auto-login-off.spec.ts
index cc6b94203..bedf0c12f 100644
--- a/src/frontend/tests/core/features/auto-login-off.spec.ts
+++ b/src/frontend/tests/core/features/auto-login-off.spec.ts
@@ -215,6 +215,8 @@ test(
).isVisible(),
);
+ await page.waitForTimeout(2000);
+
await awaitBootstrapTest(page, { skipGoto: true });
await page.getByTestId("side_nav_options_all-templates").click();
diff --git a/src/frontend/tests/core/features/filterEdge-shard-0.spec.ts b/src/frontend/tests/core/features/filterEdge-shard-0.spec.ts
index 27acb1338..94c578dff 100644
--- a/src/frontend/tests/core/features/filterEdge-shard-0.spec.ts
+++ b/src/frontend/tests/core/features/filterEdge-shard-0.spec.ts
@@ -73,9 +73,11 @@ test(
}
}
- await page.waitForTimeout(1000);
+ await page.waitForTimeout(500);
await visibleElementHandle.hover().then(async () => {
+ await page.waitForTimeout(1000);
+
await expect(
page.getByText("Drag to connect compatible outputs").first(),
).toBeVisible();
@@ -105,7 +107,11 @@ test(
}
}
+ await page.waitForTimeout(500);
+
await visibleElementHandle.hover().then(async () => {
+ await page.waitForTimeout(1000);
+
await expect(
page.getByText("Drag to connect compatible outputs").first(),
).toBeVisible();
diff --git a/src/frontend/tests/core/features/playground.spec.ts b/src/frontend/tests/core/features/playground.spec.ts
index db723bd3d..c1a9e1012 100644
--- a/src/frontend/tests/core/features/playground.spec.ts
+++ b/src/frontend/tests/core/features/playground.spec.ts
@@ -164,13 +164,21 @@ test(
await page.getByTestId("chat-message-User-session_after_delete").click();
await expect(page.getByTestId("session-selector")).toBeVisible();
+ await page.waitForTimeout(500);
+
// check helpful button
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await page.getByTestId("helpful-button").click();
+
+ await page.waitForTimeout(500);
+
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await expect(page.getByTestId("icon-ThumbUpIconCustom")).toBeVisible({
timeout: 10000,
});
+
+ await page.waitForTimeout(500);
+
await page.getByTestId("helpful-button").click();
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await expect(page.getByTestId("icon-ThumbUpIconCustom")).toBeVisible({
@@ -178,26 +186,38 @@ test(
visible: false,
});
// check not helpful button
+ await page.waitForTimeout(500);
+
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await page.getByTestId("not-helpful-button").click();
+ await page.waitForTimeout(500);
+
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await expect(page.getByTestId("icon-ThumbDownIconCustom")).toBeVisible({
timeout: 10000,
});
await page.getByTestId("not-helpful-button").click();
+ await page.waitForTimeout(500);
+
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await expect(page.getByTestId("icon-ThumbDownIconCustom")).toBeVisible({
timeout: 10000,
visible: false,
});
// check switch feedback
+ await page.waitForTimeout(500);
+
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await page.getByTestId("helpful-button").click();
+ await page.waitForTimeout(500);
+
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await expect(page.getByTestId("icon-ThumbUpIconCustom")).toBeVisible({
timeout: 10000,
});
await page.getByTestId("not-helpful-button").click();
+ await page.waitForTimeout(500);
+
await page.getByTestId("chat-message-AI-session_after_delete").hover();
await expect(page.getByTestId("icon-ThumbDownIconCustom")).toBeVisible({
timeout: 10000,
diff --git a/src/frontend/tests/extended/features/edit-tools.spec.ts b/src/frontend/tests/extended/features/edit-tools.spec.ts
new file mode 100644
index 000000000..d137bcceb
--- /dev/null
+++ b/src/frontend/tests/extended/features/edit-tools.spec.ts
@@ -0,0 +1,76 @@
+import { expect, test } from "@playwright/test";
+import { awaitBootstrapTest } from "../../utils/await-bootstrap-test";
+test(
+ "user should be able to edit tools",
+ { tag: ["@release"] },
+ async ({ page }) => {
+ await awaitBootstrapTest(page);
+
+ await page.getByTestId("blank-flow").click();
+
+ await page.getByTestId("sidebar-search-input").click();
+ await page.getByTestId("sidebar-search-input").fill("api request");
+
+ await page.waitForSelector('[data-testid="dataAPI Request"]', {
+ timeout: 3000,
+ });
+
+ await page
+ .getByTestId("dataAPI Request")
+ .hover()
+ .then(async () => {
+ await page.getByTestId("add-component-button-api-request").click();
+ });
+
+ await page.waitForSelector(
+ '[data-testid="generic-node-title-arrangement"]',
+ {
+ timeout: 3000,
+ },
+ );
+
+ await page.getByTestId("generic-node-title-arrangement").click();
+
+ await page.waitForTimeout(500);
+
+ await page.getByTestId("tool-mode-button").click();
+
+ await page.locator('[data-testid="icon-Hammer"]').nth(1).waitFor({
+ timeout: 3000,
+ state: "visible",
+ });
+
+ await page.getByTestId("icon-Hammer").nth(1).click();
+
+ await page.waitForSelector("text=edit tools", { timeout: 30000 });
+
+ const rowsCount = await page.getByRole("gridcell").count();
+
+ expect(rowsCount).toBeGreaterThan(3);
+
+ expect(await page.getByRole("switch").nth(0).isChecked()).toBe(true);
+
+ await page.getByRole("switch").nth(0).click();
+
+ expect(await page.getByRole("switch").nth(0).isChecked()).toBe(false);
+
+ await page.getByText("Save").last().click();
+
+ await page.waitForSelector(
+ '[data-testid="generic-node-title-arrangement"]',
+ {
+ timeout: 3000,
+ },
+ );
+
+ await page.waitForTimeout(500);
+
+ await page.getByTestId("icon-Hammer").nth(1).click();
+
+ await page.waitForSelector("text=edit tools", { timeout: 30000 });
+
+ await page.waitForTimeout(500);
+
+ expect(await page.getByRole("switch").nth(0).isChecked()).toBe(false);
+ },
+);