From 67f74655b771877d9d2f8774f4933def59b32947 Mon Sep 17 00:00:00 2001 From: Duarte Martinho Date: Tue, 9 Dec 2025 11:41:31 +0000 Subject: [PATCH 1/2] fix(server): ensure server exists before deletion in delete_server function Signed-off-by: Duarte Martinho --- mcpgateway/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mcpgateway/main.py b/mcpgateway/main.py index ef1f5e1b75..d0a7c84ed5 100644 --- a/mcpgateway/main.py +++ b/mcpgateway/main.py @@ -1966,6 +1966,7 @@ async def delete_server(server_id: str, db: Session = Depends(get_db), user=Depe try: logger.debug(f"User {user} is deleting server with ID {server_id}") user_email = user.get("email") if isinstance(user, dict) else str(user) + await server_service.get_server(db, server_id) await server_service.delete_server(db, server_id, user_email=user_email) return { "status": "success", From ac7b1545dd9c912be8eb519c442da82960e5948a Mon Sep 17 00:00:00 2001 From: Mihai Criveti Date: Sat, 13 Dec 2025 00:50:45 +0000 Subject: [PATCH 2/2] test(server): update delete_server tests for existence check Update test_delete_server_endpoint to mock get_server which is now called before delete_server to verify server existence. Add test_delete_server_not_found to verify that attempting to delete a non-existent server returns HTTP 404 instead of 400. Signed-off-by: Mihai Criveti --- tests/unit/mcpgateway/test_main.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/unit/mcpgateway/test_main.py b/tests/unit/mcpgateway/test_main.py index 675d1e1220..78bd65de49 100644 --- a/tests/unit/mcpgateway/test_main.py +++ b/tests/unit/mcpgateway/test_main.py @@ -520,13 +520,25 @@ def test_toggle_server_status(self, mock_toggle, test_client, auth_headers): mock_toggle.assert_called_once() @patch("mcpgateway.main.server_service.delete_server") - def test_delete_server_endpoint(self, mock_delete, test_client, auth_headers): + @patch("mcpgateway.main.server_service.get_server") + def test_delete_server_endpoint(self, mock_get, mock_delete, test_client, auth_headers): """Test permanently deleting a server.""" + mock_get.return_value = ServerRead(**MOCK_SERVER_READ) mock_delete.return_value = None response = test_client.delete("/servers/1", headers=auth_headers) assert response.status_code == 200 assert response.json()["status"] == "success" + @patch("mcpgateway.main.server_service.get_server") + def test_delete_server_not_found(self, mock_get, test_client, auth_headers): + """Test deleting a non-existent server returns 404.""" + from mcpgateway.services.server_service import ServerNotFoundError + + mock_get.side_effect = ServerNotFoundError("Server not found: nonexistent-id") + response = test_client.delete("/servers/nonexistent-id", headers=auth_headers) + assert response.status_code == 404 + assert "Server not found" in response.json()["detail"] + @patch("mcpgateway.main.tool_service.list_server_tools") def test_server_get_tools(self, mock_list_tools, test_client, auth_headers): """Test listing tools associated with a server."""