Spaces:
Running
Running
| from unittest import mock | |
| from uuid import uuid4 | |
| import pytest | |
| from fastapi import HTTPException, status | |
| from httpx import AsyncClient | |
| def body(): | |
| return { | |
| "name": "test_variable", | |
| "value": "test_value", | |
| "type": "test_type", | |
| "default_fields": ["test_field"], | |
| } | |
| async def test_create_variable(client: AsyncClient, body, logged_in_headers): | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_201_CREATED | |
| assert body["name"] == result["name"] | |
| assert body["type"] == result["type"] | |
| assert body["default_fields"] == result["default_fields"] | |
| assert "id" in result | |
| assert body["value"] != result["value"] | |
| async def test_create_variable__variable_name_already_exists(client: AsyncClient, body, logged_in_headers): | |
| await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_400_BAD_REQUEST | |
| assert "Variable name already exists" in result["detail"] | |
| async def test_create_variable__variable_name_and_value_cannot_be_empty(client: AsyncClient, body, logged_in_headers): | |
| body["name"] = "" | |
| body["value"] = "" | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_400_BAD_REQUEST | |
| assert "Variable name and value cannot be empty" in result["detail"] | |
| async def test_create_variable__variable_name_cannot_be_empty(client: AsyncClient, body, logged_in_headers): | |
| body["name"] = "" | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_400_BAD_REQUEST | |
| assert "Variable name cannot be empty" in result["detail"] | |
| async def test_create_variable__variable_value_cannot_be_empty(client: AsyncClient, body, logged_in_headers): | |
| body["value"] = "" | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_400_BAD_REQUEST | |
| assert "Variable value cannot be empty" in result["detail"] | |
| async def test_create_variable__httpexception(client: AsyncClient, body, logged_in_headers): | |
| status_code = 418 | |
| generic_message = "I'm a teapot" | |
| with mock.patch("langflow.services.auth.utils.encrypt_api_key") as m: | |
| m.side_effect = HTTPException(status_code=status_code, detail=generic_message) | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_418_IM_A_TEAPOT | |
| assert generic_message in result["detail"] | |
| async def test_create_variable__exception(client: AsyncClient, body, logged_in_headers): | |
| generic_message = "Generic error message" | |
| with mock.patch("langflow.services.auth.utils.encrypt_api_key") as m: | |
| m.side_effect = Exception(generic_message) | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR | |
| assert generic_message in result["detail"] | |
| async def test_read_variables(client: AsyncClient, body, logged_in_headers): | |
| names = ["test_variable1", "test_variable2", "test_variable3"] | |
| for name in names: | |
| body["name"] = name | |
| await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| response = await client.get("api/v1/variables/", headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_200_OK | |
| assert all(name in [r["name"] for r in result] for name in names) | |
| async def test_read_variables__empty(client: AsyncClient, logged_in_headers): | |
| all_variables = await client.get("api/v1/variables/", headers=logged_in_headers) | |
| all_variables = all_variables.json() | |
| for variable in all_variables: | |
| await client.delete(f"api/v1/variables/{variable.get('id')}", headers=logged_in_headers) | |
| response = await client.get("api/v1/variables/", headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_200_OK | |
| assert result == [] | |
| async def test_read_variables__(client: AsyncClient, logged_in_headers): | |
| generic_message = "Generic error message" | |
| with mock.patch("sqlmodel.Session.exec") as m: | |
| m.side_effect = Exception(generic_message) | |
| with pytest.raises(Exception, match=generic_message): | |
| await client.get("api/v1/variables/", headers=logged_in_headers) | |
| async def test_update_variable(client: AsyncClient, body, logged_in_headers): | |
| saved = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| saved = saved.json() | |
| body["id"] = saved.get("id") | |
| body["name"] = "new_name" | |
| body["value"] = "new_value" | |
| body["type"] = "new_type" | |
| body["default_fields"] = ["new_field"] | |
| response = await client.patch(f"api/v1/variables/{saved.get('id')}", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_200_OK | |
| assert saved["id"] == result["id"] | |
| assert saved["name"] != result["name"] | |
| assert saved["default_fields"] != result["default_fields"] | |
| async def test_update_variable__exception(client: AsyncClient, body, logged_in_headers): | |
| wrong_id = uuid4() | |
| body["id"] = str(wrong_id) | |
| response = await client.patch(f"api/v1/variables/{wrong_id}", json=body, headers=logged_in_headers) | |
| result = response.json() | |
| assert response.status_code == status.HTTP_404_NOT_FOUND | |
| assert "Variable not found" in result["detail"] | |
| async def test_delete_variable(client: AsyncClient, body, logged_in_headers): | |
| response = await client.post("api/v1/variables/", json=body, headers=logged_in_headers) | |
| saved = response.json() | |
| response = await client.delete(f"api/v1/variables/{saved.get('id')}", headers=logged_in_headers) | |
| assert response.status_code == status.HTTP_204_NO_CONTENT | |
| async def test_delete_variable__exception(client: AsyncClient, logged_in_headers): | |
| wrong_id = uuid4() | |
| response = await client.delete(f"api/v1/variables/{wrong_id}", headers=logged_in_headers) | |
| assert response.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR | |