feat: Add components_only parameter to filter flows by components in API endpoint (#3932)

* Add fixture for creating flow component in tests

* Add test for reading flows with components only in test_database.py

* Add `components_only` parameter to filter flows by components in API endpoint
This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-09-27 15:18:24 -03:00 committed by GitHub
commit 35d81b7e34
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 32 additions and 9 deletions

View file

@ -11,6 +11,7 @@ from typing import TYPE_CHECKING
import orjson
import pytest
from base.langflow.components.inputs.ChatInput import ChatInput
from dotenv import load_dotenv
from fastapi.testclient import TestClient
from httpx import AsyncClient
@ -420,6 +421,17 @@ def added_webhook_test(client, json_webhook_test, logged_in_headers):
client.delete(f"api/v1/flows/{response.json()['id']}", headers=logged_in_headers)
@pytest.fixture
def flow_component(client: TestClient, logged_in_headers):
chat_input = ChatInput()
graph = Graph(start=chat_input, end=chat_input)
graph_dict = graph.dump(name="Chat Input Component")
flow = FlowCreate(**graph_dict)
response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
assert response.status_code == 201
return response.json()
@pytest.fixture
def created_api_key(active_user):
hashed = get_password_hash("random_key")
@ -448,8 +460,6 @@ def get_simple_api_test(client, logged_in_headers, json_simple_api_test):
flow = FlowCreate(name="Simple API Test", data=data, description="Simple API Test")
response = client.post("api/v1/flows/", json=flow.model_dump(), headers=logged_in_headers)
assert response.status_code == 201
assert response.json()["name"] == flow.name
assert response.json()["data"] == flow.data
return response.json()

View file

@ -67,6 +67,14 @@ def test_read_flows(client: TestClient, json_flow: str, active_user, logged_in_h
assert len(response.json()) > 0
def test_read_flows_components_only(client: TestClient, flow_component: dict, logged_in_headers):
response = client.get("api/v1/flows/", headers=logged_in_headers, params={"components_only": True})
assert response.status_code == 200
names = [flow["name"] for flow in response.json()]
assert any("Chat Input Component" in name for name in names)
assert all(flow["is_component"] is True for flow in response.json()), [flow["name"] for flow in response.json()]
def test_read_flow(client: TestClient, json_flow: str, logged_in_headers):
flow = orjson.loads(json_flow)
data = flow["data"]