Files
mcphub/tests
airano 647a650629 feat(error-handling): add network error differentiation, retry, and REST API detection (C.5)
WordPress client improvements:
- Add ConnectionError exception for network-level failures
- Differentiate DNS, SSL, timeout, and connection refused errors
- Add retry with exponential backoff for transient errors (502, 503, 504, 429)
- Auth/config errors are never retried
- Add request timeout (30s default)

Health check improvements:
- Detect REST API disabled (403/404 on /wp-json)
- Classify errors by type: dns_failure, ssl_error, timeout, connection_refused

Bare except cleanup:
- Replaced all bare except: with except Exception: across 12 files

Tests: 303 passed (13 new tests for error handling)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 14:58:16 +03:30
..

Testing Guide

Integration Tests

Quick Start

# In Docker container:
docker exec -it mcphub python tests/run_integration_tests.py

# Or local:
python tests/run_integration_tests.py

What Gets Tested

  1. Module Imports - All modules load correctly
  2. BasePlugin Architecture - Plugin system compatibility
  3. WordPress Plugin - Initialization and handlers
  4. Tool Specifications - Format and completeness
  5. Handlers Structure - All 14 handlers present
  6. Pydantic Schemas - Validation working
  7. ToolGenerator Integration - Dynamic tool generation ready

Expected Output

Running Integration Tests for WordPress MCP Server
============================================================

Running: Imports... PASSED
Running: Base Plugin... PASSED
Running: WordPress Plugin Init... PASSED
Running: Tool Specifications... PASSED
Running: Handlers Structure... PASSED
Running: Pydantic Schemas... PASSED
Running: ToolGenerator Integration... PASSED

============================================================
Test Summary:
   Total: 7
   Passed: 7
   Failed: 0
   Skipped: 0

Exit Codes

  • 0 - All tests passed
  • 1 - Some tests failed

JSON Output

The script also outputs results as JSON for programmatic parsing:

{
  "timestamp": "2025-11-16T10:30:00",
  "tests": [
    {
      "name": "imports",
      "status": "passed",
      "message": "All modules imported successfully",
      "details": {}
    }
  ],
  "summary": {
    "total": 7,
    "passed": 7,
    "failed": 0,
    "skipped": 0
  }
}

Manual Testing with Real Sites

To test with real sites, use MCP Inspector or Claude Desktop:

# Test health
wordpress_get_site_health(site="mysite")

# Test posts
wordpress_list_posts(site="mysite", per_page=5)

# Test products
wordpress_list_products(site="mysite", per_page=5)

# Test WP-CLI (requires container access)
wordpress_wp_cache_type(site="mysite")

Troubleshooting

Import Errors

Error: ModuleNotFoundError: No module named 'plugins'

Fix: Run from project root:

cd /app  # In Docker
python tests/run_integration_tests.py

Handler Errors

Error: Can't instantiate abstract class WordPressPlugin

Fix: This means BasePlugin still has abstract get_tools(). This should be fixed in the latest version.