Skip to main content
Glama
test_wiki_page_delete.py5.36 kB
"""Tests for wiki page delete functionality.""" from unittest.mock import AsyncMock import pytest from mediawiki_api_mcp.client import MediaWikiClient from mediawiki_api_mcp.handlers.wiki_page_delete import handle_delete_page @pytest.fixture def mock_client(): """Create a mock MediaWiki client.""" client = AsyncMock(spec=MediaWikiClient) return client @pytest.mark.asyncio async def test_handle_delete_page_success(mock_client): """Test successful page deletion.""" # Mock successful delete response mock_client.delete_page.return_value = { "title": "Test Page", "reason": "Test deletion", "logid": 12345 } arguments = { "title": "Test Page", "reason": "Test deletion" } result = await handle_delete_page(mock_client, arguments) assert len(result) == 1 assert "Successfully deleted page 'Test Page'" in result[0].text assert "Test deletion" in result[0].text assert "12345" in result[0].text mock_client.delete_page.assert_called_once() @pytest.mark.asyncio async def test_handle_delete_page_with_pageid(mock_client): """Test page deletion using page ID.""" mock_client.delete_page.return_value = { "title": "Test Page", "reason": "Auto-generated reason", "logid": 12346 } arguments = { "pageid": 123, "reason": "Delete by ID" } result = await handle_delete_page(mock_client, arguments) assert len(result) == 1 assert "Successfully deleted page 'Test Page'" in result[0].text # Check that delete_page was called with the expected arguments call_args = mock_client.delete_page.call_args[1] assert call_args["pageid"] == 123 assert call_args["reason"] == "Delete by ID" assert "title" not in call_args # title was None so should be filtered out mock_client.delete_page.assert_called_once() @pytest.mark.asyncio async def test_handle_delete_page_with_options(mock_client): """Test page deletion with optional parameters.""" mock_client.delete_page.return_value = { "title": "Test Page", "reason": "Test deletion with options", "logid": 12347 } arguments = { "title": "Test Page", "reason": "Test deletion with options", "deletetalk": True, "tags": ["test", "automated"], "watchlist": "watch" } result = await handle_delete_page(mock_client, arguments) assert len(result) == 1 assert "Successfully deleted page 'Test Page'" in result[0].text # Check that delete_page was called with the expected arguments call_args = mock_client.delete_page.call_args[1] assert call_args["title"] == "Test Page" assert call_args["reason"] == "Test deletion with options" assert call_args["deletetalk"] is True assert call_args["tags"] == ["test", "automated"] assert call_args["watchlist"] == "watch" mock_client.delete_page.assert_called_once() @pytest.mark.asyncio async def test_handle_delete_page_missing_identifier(mock_client): """Test error when both title and pageid are missing.""" arguments = { "reason": "Test deletion" } result = await handle_delete_page(mock_client, arguments) assert len(result) == 1 assert "Error: Either 'title' or 'pageid' must be provided" in result[0].text mock_client.delete_page.assert_not_called() @pytest.mark.asyncio async def test_handle_delete_page_api_error(mock_client): """Test handling of API errors.""" mock_client.delete_page.side_effect = Exception("API Error") arguments = { "title": "Test Page", "reason": "Test deletion" } result = await handle_delete_page(mock_client, arguments) assert len(result) == 1 assert "Error deleting page: API Error" in result[0].text @pytest.mark.asyncio async def test_handle_delete_page_delete_failed(mock_client): """Test handling when delete operation fails.""" mock_client.delete_page.return_value = { "error": { "code": "permissiondenied", "info": "You don't have permission to delete this page." } } arguments = { "title": "Test Page", "reason": "Test deletion" } result = await handle_delete_page(mock_client, arguments) assert len(result) == 1 assert "Delete failed:" in result[0].text @pytest.mark.asyncio async def test_handle_delete_page_none_values_filtered(mock_client): """Test that None values are filtered out from parameters.""" mock_client.delete_page.return_value = { "title": "Test Page", "reason": "Test deletion", "logid": 12348 } arguments = { "title": "Test Page", "pageid": None, "reason": None, "tags": None, "deletetalk": False, "oldimage": None } result = await handle_delete_page(mock_client, arguments) assert len(result) == 1 assert "Successfully deleted page" in result[0].text # Verify that only non-None values were passed to delete_page call_args = mock_client.delete_page.call_args[1] assert "pageid" not in call_args assert "reason" not in call_args assert "tags" not in call_args assert "oldimage" not in call_args assert call_args["deletetalk"] is False # False is kept, not filtered

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/entanglr/mediawiki-api-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server