From e8b81f71ef811764d9fb44b312707b446f18c14a Mon Sep 17 00:00:00 2001 From: Reinier van der Leer Date: Thu, 12 Feb 2026 14:20:02 +0100 Subject: [PATCH] fix tests --- .../backend/backend/api/conftest.py | 55 +------- autogpt_platform/backend/backend/conftest.py | 49 +++++++ .../backend/copilot/tools/find_block_test.py | 20 ++- .../agent_generator/test_library_agents.py | 132 +++++++----------- 4 files changed, 121 insertions(+), 135 deletions(-) diff --git a/autogpt_platform/backend/backend/api/conftest.py b/autogpt_platform/backend/backend/api/conftest.py index d471a3d536..7e8cc1aec6 100644 --- a/autogpt_platform/backend/backend/api/conftest.py +++ b/autogpt_platform/backend/backend/api/conftest.py @@ -1,4 +1,9 @@ -"""Common test fixtures for server tests.""" +"""Common test fixtures for server tests. + +Note: Common fixtures like test_user_id, admin_user_id, target_user_id, +setup_test_user, and setup_admin_user are defined in the parent conftest.py +(backend/conftest.py) and are available here automatically. +""" import pytest from pytest_snapshot.plugin import Snapshot @@ -11,54 +16,6 @@ def configured_snapshot(snapshot: Snapshot) -> Snapshot: return snapshot -@pytest.fixture -def test_user_id() -> str: - """Test user ID fixture.""" - return "3e53486c-cf57-477e-ba2a-cb02dc828e1a" - - -@pytest.fixture -def admin_user_id() -> str: - """Admin user ID fixture.""" - return "4e53486c-cf57-477e-ba2a-cb02dc828e1b" - - -@pytest.fixture -def target_user_id() -> str: - """Target user ID fixture.""" - return "5e53486c-cf57-477e-ba2a-cb02dc828e1c" - - -@pytest.fixture -async def setup_test_user(test_user_id): - """Create test user in database before tests.""" - from backend.data.user import get_or_create_user - - # Create the test user in the database using JWT token format - user_data = { - "sub": test_user_id, - "email": "test@example.com", - "user_metadata": {"name": "Test User"}, - } - await get_or_create_user(user_data) - return test_user_id - - -@pytest.fixture -async def setup_admin_user(admin_user_id): - """Create admin user in database before tests.""" - from backend.data.user import get_or_create_user - - # Create the admin user in the database using JWT token format - user_data = { - "sub": admin_user_id, - "email": "test-admin@example.com", - "user_metadata": {"name": "Test Admin"}, - } - await get_or_create_user(user_data) - return admin_user_id - - @pytest.fixture def mock_jwt_user(test_user_id): """Provide mock JWT payload for regular user testing.""" diff --git a/autogpt_platform/backend/backend/conftest.py b/autogpt_platform/backend/backend/conftest.py index 57481e4b85..4fc6693f5e 100644 --- a/autogpt_platform/backend/backend/conftest.py +++ b/autogpt_platform/backend/backend/conftest.py @@ -1,6 +1,7 @@ import logging import os +import pytest import pytest_asyncio from dotenv import load_dotenv @@ -27,6 +28,54 @@ async def server(): yield server +@pytest.fixture +def test_user_id() -> str: + """Test user ID fixture.""" + return "3e53486c-cf57-477e-ba2a-cb02dc828e1a" + + +@pytest.fixture +def admin_user_id() -> str: + """Admin user ID fixture.""" + return "4e53486c-cf57-477e-ba2a-cb02dc828e1b" + + +@pytest.fixture +def target_user_id() -> str: + """Target user ID fixture.""" + return "5e53486c-cf57-477e-ba2a-cb02dc828e1c" + + +@pytest.fixture +async def setup_test_user(test_user_id): + """Create test user in database before tests.""" + from backend.data.user import get_or_create_user + + # Create the test user in the database using JWT token format + user_data = { + "sub": test_user_id, + "email": "test@example.com", + "user_metadata": {"name": "Test User"}, + } + await get_or_create_user(user_data) + return test_user_id + + +@pytest.fixture +async def setup_admin_user(admin_user_id): + """Create admin user in database before tests.""" + from backend.data.user import get_or_create_user + + # Create the admin user in the database using JWT token format + user_data = { + "sub": admin_user_id, + "email": "test-admin@example.com", + "user_metadata": {"name": "Test Admin"}, + } + await get_or_create_user(user_data) + return admin_user_id + + @pytest_asyncio.fixture(scope="session", loop_scope="session", autouse=True) async def graph_cleanup(server): created_graph_ids = [] diff --git a/autogpt_platform/backend/backend/copilot/tools/find_block_test.py b/autogpt_platform/backend/backend/copilot/tools/find_block_test.py index 1547626b87..e15f151003 100644 --- a/autogpt_platform/backend/backend/copilot/tools/find_block_test.py +++ b/autogpt_platform/backend/backend/copilot/tools/find_block_test.py @@ -75,10 +75,14 @@ class TestFindBlockFiltering: "standard-block-id": standard_block, }.get(block_id) + mock_search_db = MagicMock() + mock_search_db.unified_hybrid_search = AsyncMock( + return_value=(search_results, 2) + ) + with patch( - "backend.copilot.tools.find_block.unified_hybrid_search", - new_callable=AsyncMock, - return_value=(search_results, 2), + "backend.copilot.tools.find_block.search", + return_value=mock_search_db, ): with patch( "backend.copilot.tools.find_block.get_block", @@ -119,10 +123,14 @@ class TestFindBlockFiltering: "normal-block-id": normal_block, }.get(block_id) + mock_search_db = MagicMock() + mock_search_db.unified_hybrid_search = AsyncMock( + return_value=(search_results, 2) + ) + with patch( - "backend.copilot.tools.find_block.unified_hybrid_search", - new_callable=AsyncMock, - return_value=(search_results, 2), + "backend.copilot.tools.find_block.search", + return_value=mock_search_db, ): with patch( "backend.copilot.tools.find_block.get_block", diff --git a/autogpt_platform/backend/test/agent_generator/test_library_agents.py b/autogpt_platform/backend/test/agent_generator/test_library_agents.py index b0cd9f0c2c..ae7e19ff7f 100644 --- a/autogpt_platform/backend/test/agent_generator/test_library_agents.py +++ b/autogpt_platform/backend/test/agent_generator/test_library_agents.py @@ -31,18 +31,20 @@ class TestGetLibraryAgentsForGeneration: mock_response = MagicMock() mock_response.agents = [mock_agent] + mock_db = MagicMock() + mock_db.list_library_agents = AsyncMock(return_value=mock_response) + with patch.object( - core.library_db, - "list_library_agents", - new_callable=AsyncMock, - return_value=mock_response, - ) as mock_list: + core, + "library_db", + return_value=mock_db, + ): result = await core.get_library_agents_for_generation( user_id="user-123", search_query="send email", ) - mock_list.assert_called_once_with( + mock_db.list_library_agents.assert_called_once_with( user_id="user-123", search_term="send email", page=1, @@ -80,11 +82,13 @@ class TestGetLibraryAgentsForGeneration: ), ] + mock_db = MagicMock() + mock_db.list_library_agents = AsyncMock(return_value=mock_response) + with patch.object( - core.library_db, - "list_library_agents", - new_callable=AsyncMock, - return_value=mock_response, + core, + "library_db", + return_value=mock_db, ): result = await core.get_library_agents_for_generation( user_id="user-123", @@ -101,18 +105,20 @@ class TestGetLibraryAgentsForGeneration: mock_response = MagicMock() mock_response.agents = [] + mock_db = MagicMock() + mock_db.list_library_agents = AsyncMock(return_value=mock_response) + with patch.object( - core.library_db, - "list_library_agents", - new_callable=AsyncMock, - return_value=mock_response, - ) as mock_list: + core, + "library_db", + return_value=mock_db, + ): await core.get_library_agents_for_generation( user_id="user-123", max_results=5, ) - mock_list.assert_called_once_with( + mock_db.list_library_agents.assert_called_once_with( user_id="user-123", search_term=None, page=1, @@ -707,7 +713,7 @@ class TestExtractUuidsFromText: class TestGetLibraryAgentById: - """Test get_library_agent_by_id function (and its alias get_library_agent_by_graph_id).""" + """Test get_library_agent_by_id function (alias: get_library_agent_by_graph_id).""" @pytest.mark.asyncio async def test_returns_agent_when_found_by_graph_id(self): @@ -720,12 +726,10 @@ class TestGetLibraryAgentById: mock_agent.input_schema = {"properties": {}} mock_agent.output_schema = {"properties": {}} - with patch.object( - core.library_db, - "get_library_agent_by_graph_id", - new_callable=AsyncMock, - return_value=mock_agent, - ): + mock_db = MagicMock() + mock_db.get_library_agent_by_graph_id = AsyncMock(return_value=mock_agent) + + with patch.object(core, "library_db", return_value=mock_db): result = await core.get_library_agent_by_id("user-123", "agent-123") assert result is not None @@ -743,20 +747,11 @@ class TestGetLibraryAgentById: mock_agent.input_schema = {"properties": {}} mock_agent.output_schema = {"properties": {}} - with ( - patch.object( - core.library_db, - "get_library_agent_by_graph_id", - new_callable=AsyncMock, - return_value=None, # Not found by graph_id - ), - patch.object( - core.library_db, - "get_library_agent", - new_callable=AsyncMock, - return_value=mock_agent, # Found by library ID - ), - ): + mock_db = MagicMock() + mock_db.get_library_agent_by_graph_id = AsyncMock(return_value=None) + mock_db.get_library_agent = AsyncMock(return_value=mock_agent) + + with patch.object(core, "library_db", return_value=mock_db): result = await core.get_library_agent_by_id("user-123", "library-id-123") assert result is not None @@ -766,20 +761,13 @@ class TestGetLibraryAgentById: @pytest.mark.asyncio async def test_returns_none_when_not_found_by_either_method(self): """Test that None is returned when agent not found by either method.""" - with ( - patch.object( - core.library_db, - "get_library_agent_by_graph_id", - new_callable=AsyncMock, - return_value=None, - ), - patch.object( - core.library_db, - "get_library_agent", - new_callable=AsyncMock, - side_effect=core.NotFoundError("Not found"), - ), - ): + mock_db = MagicMock() + mock_db.get_library_agent_by_graph_id = AsyncMock(return_value=None) + mock_db.get_library_agent = AsyncMock( + side_effect=core.NotFoundError("Not found") + ) + + with patch.object(core, "library_db", return_value=mock_db): result = await core.get_library_agent_by_id("user-123", "nonexistent") assert result is None @@ -787,27 +775,20 @@ class TestGetLibraryAgentById: @pytest.mark.asyncio async def test_returns_none_on_exception(self): """Test that None is returned when exception occurs in both lookups.""" - with ( - patch.object( - core.library_db, - "get_library_agent_by_graph_id", - new_callable=AsyncMock, - side_effect=Exception("Database error"), - ), - patch.object( - core.library_db, - "get_library_agent", - new_callable=AsyncMock, - side_effect=Exception("Database error"), - ), - ): + mock_db = MagicMock() + mock_db.get_library_agent_by_graph_id = AsyncMock( + side_effect=Exception("Database error") + ) + mock_db.get_library_agent = AsyncMock(side_effect=Exception("Database error")) + + with patch.object(core, "library_db", return_value=mock_db): result = await core.get_library_agent_by_id("user-123", "agent-123") assert result is None @pytest.mark.asyncio async def test_alias_works(self): - """Test that get_library_agent_by_graph_id is an alias for get_library_agent_by_id.""" + """Test that get_library_agent_by_graph_id is an alias.""" assert core.get_library_agent_by_graph_id is core.get_library_agent_by_id @@ -828,20 +809,11 @@ class TestGetAllRelevantAgentsWithUuids: mock_response = MagicMock() mock_response.agents = [] - with ( - patch.object( - core.library_db, - "get_library_agent_by_graph_id", - new_callable=AsyncMock, - return_value=mock_agent, - ), - patch.object( - core.library_db, - "list_library_agents", - new_callable=AsyncMock, - return_value=mock_response, - ), - ): + mock_db = MagicMock() + mock_db.get_library_agent_by_graph_id = AsyncMock(return_value=mock_agent) + mock_db.list_library_agents = AsyncMock(return_value=mock_response) + + with patch.object(core, "library_db", return_value=mock_db): result = await core.get_all_relevant_agents_for_generation( user_id="user-123", search_query="Use agent 46631191-e8a8-486f-ad90-84f89738321d",