langflow/src/frontend/tests/core/integrations/Simple Agent.spec.ts
Cristhian Zanforlin Lousa 29e484465c
feat: Refactor langflow Components - Consolidate Imports, Remove Unused Components, and Update Astra Assistant Icons (#4460)
* fix lint

* fix lint

* [autofix.ci] apply automated fixes

* 📝 (message_to_data.py): refactor convert_message_to_data method to simplify code and improve readability
🔧 (conftest.py): update imports to organize them alphabetically for better code maintenance
🔧 (test_starter_projects.py): organize imports alphabetically for better code maintenance
🔧 (test_astra_component.py): organize imports alphabetically for better code maintenance
🔧 (test_parse_json_data.py): remove unnecessary whitespace for cleaner code
🔧 (test_chat_input.py): remove unnecessary whitespace for cleaner code
🔧 (test_text_input.py): remove unnecessary whitespace for cleaner code
🔧 (test_output_parser.py): remove unnecessary whitespace for cleaner code
🔧 (test_chat_output.py): remove unnecessary whitespace for cleaner code
🔧 (test_text_output.py): remove unnecessary whitespace for cleaner code
🔧 (test_prompt.py): remove unnecessary whitespace for cleaner code
🔧 (test_basic_prompting.py): remove unnecessary whitespace for cleaner code
🔧 (test_misc.py): remove unnecessary whitespace for cleaner code
🔧 (utils.py): remove unnecessary whitespace for cleaner code
🔧 (test_server_init.py): remove unnecessary whitespace for cleaner code
🔧 (test_endpoints.py): remove unnecessary whitespace for cleaner code
🔧 (test_component_toolkit.py): remove unnecessary whitespace for cleaner code
🔧 (test_agent_component.py): remove unnecessary whitespace for cleaner code
🔧 (test_agent_events.py): remove unnecessary whitespace for cleaner code
🔧 (test_tool_calling_agent.py): remove unnecessary whitespace for cleaner code
🔧 (test_structured_output_component.py): remove unnecessary whitespace for cleaner code
🔧 (test_chatollama_component.py): remove unnecessary whitespace for cleaner code

📝 (test_huggingface.py): Remove unnecessary import statement
📝 (test_create_data_component.py): Remove unnecessary import statement
📝 (test_update_data_component.py): Remove unnecessary import statement
📝 (test_componet_set_functionality.py): Remove unnecessary import statement
📝 (test_component.py): Remove unnecessary import statement
📝 (test_event_manager.py): Remove unnecessary import statement
📝 (test_edge_base.py): Remove unnecessary import statement
📝 (test_state_model.py): Remove unnecessary import statement
📝 (test_base.py): Remove unnecessary import statement
📝 (test_callback_graph.py): Remove unnecessary import statement
📝 (test_cycles.py): Remove unnecessary import statement
📝 (test_graph_state_model.py): Remove unnecessary import statement
📝 (test_runnable_vertices_manager.py): Remove unnecessary import statement
📝 (test_utils.py): Remove unnecessary import statement
📝 (test_graph.py): Remove unnecessary import statement
📝 (test_base_model_from_schema.py): Reorder import statements
📝 (test_memory_chatbot.py): Remove unnecessary import statement
📝 (test_vector_store_rag.py): Remove unnecessary import statement
📝 (test_inputs.py): Reorder import statements
📝 (test_io_schema.py): Remove unnecessary import statement
📝 (test_table_schema.py): Remove unnecessary import statement
📝 (test_schema_message.py): Remove unnecessary import statement
📝 (test_service.py): Reorder import statements
📝 (test_api_key.py): Remove unnecessary import statement
📝 (test_chat_endpoint.py): Remove unnecessary import statement
📝 (test_cli.py): Remove unnecessary import statement

📝 (test_custom_component.py): Add missing import statement in test_custom_component.py
📝 (test_custom_component_with_client.py): Add missing import statement in test_custom_component_with_client.py
📝 (test_data_class.py): Add missing import statement in test_data_class.py
📝 (test_data_components.py): Add missing import statement in test_data_components.py
📝 (test_database.py): Add missing import statement in test_database.py
📝 (test_endpoints.py): Add missing import statement in test_endpoints.py
📝 (test_files.py): Add missing import statement in test_files.py
📝 (test_frontend_nodes.py): Add missing import statement in test_frontend_nodes.py
📝 (test_initial_setup.py): Add missing import statement in test_initial_setup.py
📝 (test_kubernetes_secrets.py): Add missing import statement in test_kubernetes_secrets.py
📝 (test_logger.py): Add missing import statement in test_logger.py
📝 (test_login.py): Add missing import statement in test_login.py
📝 (test_messages.py): Add missing import statement in test_messages.py
📝 (test_messages_endpoints.py): Add missing import statement in test_messages_endpoints.py
📝 (test_schema.py): Add missing import statement in test_schema.py
📝 (test_telemetry.py): Add missing import statement in test_telemetry.py
📝 (test_template.py): Add missing import statement in test_template.py
📝 (test_user.py): Add missing import statement in test_user.py
📝 (test_validate_code.py): Add missing import statement in test_validate_code.py
📝 (test_connection_string_parser.py): Add missing import statement in test_connection_string_parser.py
📝 (test_format_directory_path.py): Add missing import statement in test_format_directory_path.py
📝 (test_rewrite_file_path.py): Add missing import statement in test_rewrite_file_path.py
📝 (test_truncate_long_strings.py): Add missing import statement in test_truncate_long_strings.py
📝 (test_truncate_long_strings_on_objects.py): Add missing import statement in test_truncate_long_strings_on_objects.py

* [autofix.ci] apply automated fixes

* formatting

* Update import paths for MemoryComponent and HuggingFaceEndpointsComponent

* fix tests

*  (decisionFlow.spec.ts): update test selectors to match changes in the application's UI for better test accuracy and reliability

* [autofix.ci] apply automated fixes

* ♻️ (test_output_parser.py): refactor import statements to improve code readability and maintainability

* fix tests

*  (Simple Agent.spec.ts): enable test for "Simple Agent" by removing the skip flag to ensure it runs properly

* [autofix.ci] apply automated fixes

* Remove optional type from 'num_news' field in YahooFinanceSchema

* Refactor JSON formatting for improved readability and maintainability across starter projects.

* adding icon to flows

* [autofix.ci] apply automated fixes

*  (similarity.spec.ts): update test selectors for filtering and connection nodes to match changes in the frontend implementation

* [autofix.ci] apply automated fixes

* removing init uncessary

* ⬆️ (pyproject.toml): upgrade crewai dependency to version 0.76.9 to include the latest features and bug fixes

*  (Simple Agent.spec.ts): update test assertion to check if the count of "print(" is greater than or equal to 1 for better test coverage.

* [autofix.ci] apply automated fixes

* proposed changes

* [autofix.ci] apply automated fixes

* add zep icon

* [autofix.ci] apply automated fixes

* 🔧 (model.py): remove unused import and method 'cast_vector_store' from LCVectorStoreComponent
🔧 (openai_tools.py): remove beta flag from OpenAIToolsAgentComponent
🔧 (tool_calling.py): remove beta flag from ToolCallingAgentComponent
🔧 (Vector Store RAG.json): remove 'cast_vector_store' method from starter projects
🔧 (styleUtils.ts): add missing icon 'WolframAlphaAPI' to nodeIconsLucide in styleUtils module

* add langwatch and mem0 icon

* change mem0 name to mem0ai

*  (filterSidebar.spec.ts): update test to use first() method to select the first element with the specified test ID
♻️ (filterSidebar.spec.ts): remove unnecessary code related to checking the checkbox state in the test
🔧 (generalBugs-shard-2.spec.ts): update test to select the correct element with the test ID "dataWebhook" instead of "dataWebhook Input"

* ♻️ (test_vector_store_rag.py): remove redundant code setting "vector_store" value in both ingestion_graph and rag_graph functions to improve code readability and maintainability

* [autofix.ci] apply automated fixes

* updating json test

* [autofix.ci] apply automated fixes

* ⬆️ (pyproject.toml): downgrade crewai dependency version from 0.76.9 to 0.74.2 to resolve compatibility issues

* 🐛 (generalBugs-shard-5.spec.ts): fix typo in test case for component name
🐛 (generalBugs-shard-9.spec.ts): update endX calculation to move 600 pixels to the right instead of 300
🐛 (generalBugs-shard-9.spec.ts): fix typo in test case for component name and update test steps to click "fit_view" button twice

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
2024-11-11 19:30:05 +00:00

152 lines
4.1 KiB
TypeScript

import { expect, test } from "@playwright/test";
import * as dotenv from "dotenv";
import path from "path";
import uaParser from "ua-parser-js";
test("Simple Agent", async ({ page }) => {
test.skip(
!process?.env?.OPENAI_API_KEY,
"OPENAI_API_KEY required to run this test",
);
if (!process.env.CI) {
dotenv.config({ path: path.resolve(__dirname, "../../.env") });
}
await page.goto("/");
await page.waitForSelector('[data-testid="mainpage_title"]', {
timeout: 30000,
});
await page.waitForSelector('[id="new-project-btn"]', {
timeout: 30000,
});
let modalCount = 0;
try {
const modalTitleElement = await 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.waitForTimeout(3000);
modalCount = await page.getByTestId("modal-title")?.count();
}
const getUA = await page.evaluate(() => navigator.userAgent);
const userAgentInfo = uaParser(getUA);
let control = "Control";
if (userAgentInfo.os.name.includes("Mac")) {
control = "Meta";
}
await page.getByTestId("side_nav_options_all-templates").click();
await page.getByRole("heading", { name: "Simple Agent" }).first().click();
await page.waitForSelector('[data-testid="fit_view"]', {
timeout: 100000,
});
await page.getByTestId("fit_view").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("zoom_out").click();
await page.getByTestId("zoom_out").click();
let outdatedComponents = await page.getByTestId("icon-AlertTriangle").count();
while (outdatedComponents > 0) {
await page.getByTestId("icon-AlertTriangle").first().click();
await page.waitForTimeout(1000);
outdatedComponents = await page.getByTestId("icon-AlertTriangle").count();
}
let filledApiKey = await page.getByTestId("remove-icon-badge").count();
while (filledApiKey > 0) {
await page.getByTestId("remove-icon-badge").first().click();
await page.waitForTimeout(1000);
filledApiKey = await page.getByTestId("remove-icon-badge").count();
}
await page
.getByTestId("popover-anchor-input-api_key")
.fill(process.env.OPENAI_API_KEY ?? "");
await page.getByTestId("fit_view").click();
await page.getByTestId("dropdown_str_model_name").click();
await page.getByTestId("gpt-4o-1-option").click();
await page.waitForTimeout(1000);
await page
.getByTestId("textarea_str_input_value")
.fill(
"Use the Python REPL tool to create a python function that calculates 4 + 4 and stores it in a variable.",
);
await page.getByTestId("button_run_chat output").click();
await page.waitForSelector("text=built successfully", { timeout: 30000 });
await page.getByText("built successfully").last().click({
timeout: 15000,
});
await page.getByText("Playground", { exact: true }).last().click();
await page.waitForSelector(
"text=Use the Python REPL tool to create a python function that calculates 4 + 4 and stores it in a variable.",
{
timeout: 30000,
},
);
await page.waitForTimeout(1000);
expect(page.getByText("User")).toBeVisible();
let pythonWords = await page.getByText("4 + 4").count();
expect(pythonWords).toBe(2);
await page
.getByPlaceholder("Send a message...")
.fill("write short python script to say hello world");
await page.getByTestId("button-send").last().click();
await page.waitForSelector(
"text=write short python script to say hello world",
{
timeout: 30000,
},
);
await page.waitForSelector('[data-testid="copy-code-button"]', {
timeout: 100000,
state: "visible",
});
await page.waitForTimeout(1000);
await page.getByTestId("copy-code-button").last().click();
await page.waitForTimeout(500);
await page.getByPlaceholder("Send a message...").click();
await page.waitForTimeout(500);
await page.keyboard.press(`${control}+V`);
await page.waitForTimeout(500);
pythonWords = await page.getByText("print(").count();
expect(pythonWords).toBeGreaterThanOrEqual(1);
});