* 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>
152 lines
4.1 KiB
TypeScript
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);
|
|
});
|