Skip to content

Commit a4bb41f

Browse files
committed
issue_363
Signed-off-by: Rakhi Dutta <[email protected]>
1 parent 54c64e1 commit a4bb41f

File tree

2 files changed

+59
-49
lines changed

2 files changed

+59
-49
lines changed

mcpgateway/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2638,7 +2638,7 @@ async def admin_add_resource(request: Request, db: Session = Depends(get_db), us
26382638
>>>
26392639
>>> async def test_admin_add_resource():
26402640
... response = await admin_add_resource(mock_request, mock_db, mock_user)
2641-
... return isinstance(response, RedirectResponse) and response.status_code == 303
2641+
... return isinstance(response, JSONResponse) and response.status_code == 200 and response.body.decode() == '{"message":"Add resource registered successfully!","success":true}'
26422642
>>>
26432643
>>> import asyncio; asyncio.run(test_admin_add_resource())
26442644
True

tests/e2e/test_admin_apis.py

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -337,60 +337,70 @@ async def test_admin_tool_name_conflict(self, client: AsyncClient, mock_settings
337337
class TestAdminResourceAPIs:
338338
"""Test admin resource management endpoints."""
339339

340-
async def test_admin_list_resources_empty(self, client: AsyncClient, mock_settings):
341-
"""Test GET /admin/resources returns empty list initially."""
342-
response = await client.get("/admin/resources", headers=TEST_AUTH_HEADER)
343-
assert response.status_code == 200
344-
assert response.json() == []
345-
346-
async def test_admin_resource_lifecycle(self, client: AsyncClient, mock_settings):
347-
"""Test complete resource lifecycle through admin UI."""
348-
# Create a resource via form submission
340+
async def test_admin_add_resource(self, client: AsyncClient, mock_settings):
341+
"""Test adding a resource via the admin UI."""
349342
form_data = {
350-
"uri": "admin/test/resource",
351-
"name": "test_admin_resource",
352-
"description": "Test resource via admin",
343+
"uri": mock_settings.default_resource_uri,
344+
"name": "Test Resource",
345+
"description": "A test resource",
353346
"mimeType": "text/plain",
354-
"content": "Admin test content",
347+
"content": "Sample content",
355348
}
356-
357-
# POST to /admin/resources should redirect
358-
response = await client.post("/admin/resources", data=form_data, headers=TEST_AUTH_HEADER, follow_redirects=False)
359-
assert response.status_code == 303
360-
361-
# List resources to verify creation
362-
response = await client.get("/admin/resources", headers=TEST_AUTH_HEADER)
363-
resources = response.json()
364-
assert len(resources) == 1
365-
resource = resources[0]
366-
assert resource["name"] == "test_admin_resource"
367-
resource_id = resource["id"]
368-
369-
# Get individual resource
370-
encoded_uri = quote(form_data["uri"], safe="")
371-
response = await client.get(f"/admin/resources/{encoded_uri}", headers=TEST_AUTH_HEADER)
349+
response = await client.post("/admin/resources", data=form_data, headers=TEST_AUTH_HEADER)
372350
assert response.status_code == 200
373-
data = response.json()
374-
assert "resource" in data
375-
assert "content" in data
351+
result = response.json()
352+
assert result["success"] is True
353+
assert "message" in result and "Add resource registered successfully!" in result["message"]
376354

377-
# Edit resource
378-
edit_data = {
379-
"name": "updated_admin_resource",
380-
"description": "Updated description",
381-
"mimeType": "text/markdown",
382-
"content": "Updated admin content",
355+
async def test_admin_add_resource_missing_fields(self, client: AsyncClient, mock_settings):
356+
"""Test adding a resource with missing required fields."""
357+
form_data = {
358+
"name": "Test Resource1",
359+
"description": "A test resource",
360+
# Missing 'uri', 'mimeType', and 'content'
383361
}
384-
response = await client.post(f"/admin/resources/{encoded_uri}/edit", data=edit_data, headers=TEST_AUTH_HEADER, follow_redirects=False)
385-
assert response.status_code == 303
386-
387-
# Toggle resource status
388-
response = await client.post(f"/admin/resources/{resource_id}/toggle", data={"activate": "false"}, headers=TEST_AUTH_HEADER, follow_redirects=False)
389-
assert response.status_code == 303
390-
391-
# Delete resource
392-
response = await client.post(f"/admin/resources/{encoded_uri}/delete", headers=TEST_AUTH_HEADER, follow_redirects=False)
393-
assert response.status_code == 303
362+
response = await client.post("/admin/resources", data=form_data, headers=TEST_AUTH_HEADER)
363+
assert response.status_code == 500
364+
# result = response.json()
365+
# assert result["success"] is False
366+
# assert "error" in result
367+
368+
async def test_admin_add_resource_invalid_mime_type(self, client: AsyncClient, mock_settings):
369+
"""Test adding a resource with an invalid MIME type."""
370+
form_data = {
371+
"uri": mock_settings.default_resource_uri,
372+
"name": "Test Resource",
373+
"description": "A test resource",
374+
"mimeType": "invalid/type",
375+
"content": "Sample content",
376+
}
377+
response = await client.post("/admin/resources", data=form_data, headers=TEST_AUTH_HEADER)
378+
assert response.status_code == 422
379+
# result = response.json()
380+
# assert result["success"] is False
381+
# assert "error" in result
382+
383+
async def test_admin_add_resource_duplicate_uri(self, client: AsyncClient, mock_settings):
384+
"""Test adding a resource with a duplicate URI."""
385+
form_data = {
386+
"uri": mock_settings.default_resource_uri,
387+
"name": "Test Resource",
388+
"description": "A test resource",
389+
"mimeType": "text/plain",
390+
"content": "Sample content",
391+
}
392+
# Add the resource for the first time
393+
response = await client.post("/admin/resources", data=form_data, headers=TEST_AUTH_HEADER)
394+
assert response.status_code == 200
395+
# result = response.json()
396+
# assert result["success"] is True
397+
398+
# Try adding the same resource again
399+
response = await client.post("/admin/resources", data=form_data, headers=TEST_AUTH_HEADER)
400+
assert response.status_code == 409
401+
# result = response.json()
402+
# assert result["success"] is False
403+
# assert "error" in result
394404

395405

396406
# -------------------------

0 commit comments

Comments
 (0)