From 5ef820c4733edbeba2e1e59454878b9a496d7332 Mon Sep 17 00:00:00 2001 From: Otto-AGPT Date: Wed, 11 Feb 2026 19:14:22 +0000 Subject: [PATCH] fix(backend): Fix auth helpers tests and remove unnecessary comment - Fixed 3 failing tests in helpers_test.py that were incorrectly trying to mock 'backend.api.auth.helpers.get_openapi' (which doesn't exist) - Tests now properly mock the app's openapi method directly - Removed unnecessary comment in dependabot.yml per review feedback --- .github/dependabot.yml | 2 - .../backend/backend/api/auth/helpers_test.py | 114 ++++++++++-------- 2 files changed, 64 insertions(+), 52 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f75f4f0dd1..c6a68a1f1e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,7 +1,5 @@ version: 2 updates: - # autogpt_libs merged into backend (OPEN-2998) - # backend (Poetry project) - package-ecosystem: "pip" directory: "autogpt_platform/backend" diff --git a/autogpt_platform/backend/backend/api/auth/helpers_test.py b/autogpt_platform/backend/backend/api/auth/helpers_test.py index 72410b55f7..4f8712ad4b 100644 --- a/autogpt_platform/backend/backend/api/auth/helpers_test.py +++ b/autogpt_platform/backend/backend/api/auth/helpers_test.py @@ -227,26 +227,32 @@ def test_add_auth_responses_to_openapi_empty_components(): """Test when OpenAPI schema has no components section initially.""" app = FastAPI() - # Mock get_openapi to return schema without components - original_get_openapi = get_openapi + # Store the original openapi method + original_openapi = app.openapi - def mock_get_openapi(*args, **kwargs): - schema = original_get_openapi(*args, **kwargs) - # Remove components if it exists + def mock_openapi(): + schema = get_openapi( + title=app.title, + version=app.version, + routes=app.routes, + ) + # Remove components if it exists to test component creation if "components" in schema: del schema["components"] return schema - with mock.patch("backend.api.auth.helpers.get_openapi", mock_get_openapi): - # Apply customization - add_auth_responses_to_openapi(app) + # Replace app's openapi method + app.openapi = mock_openapi - schema = app.openapi() + # Apply customization (this wraps our mock) + add_auth_responses_to_openapi(app) - # Components should be created - assert "components" in schema - assert "responses" in schema["components"] - assert "HTTP401NotAuthenticatedError" in schema["components"]["responses"] + schema = app.openapi() + + # Components should be created + assert "components" in schema + assert "responses" in schema["components"] + assert "HTTP401NotAuthenticatedError" in schema["components"]["responses"] def test_add_auth_responses_to_openapi_all_http_methods(): @@ -333,7 +339,6 @@ def test_endpoint_without_responses_section(): app = FastAPI() from fastapi import Security - from fastapi.openapi.utils import get_openapi as original_get_openapi from backend.api.auth.jwt_utils import get_jwt_payload @@ -342,44 +347,51 @@ def test_endpoint_without_responses_section(): def endpoint_without_responses(jwt: dict = Security(get_jwt_payload)): return {"data": "test"} - # Mock get_openapi to remove responses from the endpoint - def mock_get_openapi(*args, **kwargs): - schema = original_get_openapi(*args, **kwargs) - # Remove responses from our endpoint to trigger line 40 + # Create a mock openapi method that removes responses from the endpoint + def mock_openapi(): + schema = get_openapi( + title=app.title, + version=app.version, + routes=app.routes, + ) + # Remove responses from our endpoint to test response creation if "/no-responses" in schema.get("paths", {}): if "get" in schema["paths"]["/no-responses"]: - # Delete responses to force the code to create it if "responses" in schema["paths"]["/no-responses"]["get"]: del schema["paths"]["/no-responses"]["get"]["responses"] return schema - with mock.patch("backend.api.auth.helpers.get_openapi", mock_get_openapi): - # Apply customization - add_auth_responses_to_openapi(app) + # Replace app's openapi method + app.openapi = mock_openapi - # Get schema and verify 401 was added - schema = app.openapi() + # Apply customization (this wraps our mock) + add_auth_responses_to_openapi(app) - # The endpoint should now have 401 response - if "/no-responses" in schema["paths"]: - if "get" in schema["paths"]["/no-responses"]: - responses = schema["paths"]["/no-responses"]["get"].get("responses", {}) - assert "401" in responses - assert ( - responses["401"]["$ref"] - == "#/components/responses/HTTP401NotAuthenticatedError" - ) + # Get schema and verify 401 was added + schema = app.openapi() + + # The endpoint should now have 401 response + if "/no-responses" in schema["paths"]: + if "get" in schema["paths"]["/no-responses"]: + responses = schema["paths"]["/no-responses"]["get"].get("responses", {}) + assert "401" in responses + assert ( + responses["401"]["$ref"] + == "#/components/responses/HTTP401NotAuthenticatedError" + ) def test_components_with_existing_responses(): """Test when components already has a responses section.""" app = FastAPI() - # Mock get_openapi to return schema with existing components/responses - from fastapi.openapi.utils import get_openapi as original_get_openapi - - def mock_get_openapi(*args, **kwargs): - schema = original_get_openapi(*args, **kwargs) + # Create a mock openapi method that adds existing components/responses + def mock_openapi(): + schema = get_openapi( + title=app.title, + version=app.version, + routes=app.routes, + ) # Add existing components/responses if "components" not in schema: schema["components"] = {} @@ -388,21 +400,23 @@ def test_components_with_existing_responses(): } return schema - with mock.patch("backend.api.auth.helpers.get_openapi", mock_get_openapi): - # Apply customization - add_auth_responses_to_openapi(app) + # Replace app's openapi method + app.openapi = mock_openapi - schema = app.openapi() + # Apply customization (this wraps our mock) + add_auth_responses_to_openapi(app) - # Both responses should exist - assert "ExistingResponse" in schema["components"]["responses"] - assert "HTTP401NotAuthenticatedError" in schema["components"]["responses"] + schema = app.openapi() - # Verify our 401 response structure - error_response = schema["components"]["responses"][ - "HTTP401NotAuthenticatedError" - ] - assert error_response["description"] == "Authentication required" + # Both responses should exist + assert "ExistingResponse" in schema["components"]["responses"] + assert "HTTP401NotAuthenticatedError" in schema["components"]["responses"] + + # Verify our 401 response structure + error_response = schema["components"]["responses"][ + "HTTP401NotAuthenticatedError" + ] + assert error_response["description"] == "Authentication required" def test_openapi_schema_persistence():