Files
leo-claude-mktplace/test_mcp_labels.py
lmiranda 3e571f0783 test: verify MCP server fetches all 43 labels correctly
Added comprehensive test for label fetching:
- Verifies 27 org labels + 16 repo labels = 43 total
- Tests label categorization
- Validates label suggestion logic

Test Results:  PASSED
- Organization labels: 27/27 
- Repository labels: 16/16 
- Total labels: 43/43 
- Label suggestions working correctly 

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 09:42:25 -05:00

137 lines
4.4 KiB
Python

#!/usr/bin/env python3
"""
Test MCP Server Label Fetching
Verifies that the Gitea MCP server can fetch all 43 labels (27 org + 16 repo)
"""
import sys
import os
import asyncio
# Add mcp-servers/gitea to path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'mcp-servers', 'gitea'))
from mcp_server.gitea_client import GiteaClient
from mcp_server.tools.labels import LabelTools
async def test_label_fetching():
"""Test that MCP server can fetch all labels"""
print("="*60)
print("Testing MCP Server Label Fetching")
print("="*60)
# Initialize client (loads from ~/.config/claude/gitea.env and .env)
print("\n1. Initializing Gitea client...")
print(" Loading configuration from:")
print(" - System: ~/.config/claude/gitea.env")
print(" - Project: .env")
client = GiteaClient()
print(f" ✅ Client initialized")
print(f" - API URL: {client.base_url}")
print(f" - Owner: {client.owner}")
print(f" - Repo: {client.repo}")
print(f" - Mode: {client.mode}")
# Initialize label tools
print("\n2. Initializing label tools...")
label_tools = LabelTools(client)
print(" ✅ Label tools initialized")
# Fetch all labels
print("\n3. Fetching labels from Gitea...")
result = await label_tools.get_labels()
org_labels = result['organization']
repo_labels = result['repository']
total_count = result['total_count']
print(f" ✅ Labels fetched successfully")
print(f" - Organization labels: {len(org_labels)}")
print(f" - Repository labels: {len(repo_labels)}")
print(f" - Total: {total_count}")
# Verify counts
print("\n4. Verifying label counts...")
expected_org = 27
expected_repo = 16
expected_total = 43
all_passed = True
if len(org_labels) == expected_org:
print(f" ✅ Organization labels: {len(org_labels)} (expected: {expected_org})")
else:
print(f" ❌ Organization labels: {len(org_labels)} (expected: {expected_org})")
all_passed = False
if len(repo_labels) == expected_repo:
print(f" ✅ Repository labels: {len(repo_labels)} (expected: {expected_repo})")
else:
print(f" ❌ Repository labels: {len(repo_labels)} (expected: {expected_repo})")
all_passed = False
if total_count == expected_total:
print(f" ✅ Total labels: {total_count} (expected: {expected_total})")
else:
print(f" ❌ Total labels: {total_count} (expected: {expected_total})")
all_passed = False
# Show label breakdown
print("\n5. Label Breakdown:")
# Categorize org labels
org_categories = {}
for label in org_labels:
category = label['name'].split('/')[0]
if category not in org_categories:
org_categories[category] = []
org_categories[category].append(label['name'])
print("\n Organization Labels by Category:")
for category, labels in sorted(org_categories.items()):
print(f" - {category}: {len(labels)} labels")
for label in sorted(labels):
print(f"{label}")
# Categorize repo labels
repo_categories = {}
for label in repo_labels:
category = label['name'].split('/')[0]
if category not in repo_categories:
repo_categories[category] = []
repo_categories[category].append(label['name'])
print("\n Repository Labels by Category:")
for category, labels in sorted(repo_categories.items()):
print(f" - {category}: {len(labels)} labels")
for label in sorted(labels):
print(f"{label}")
# Test label suggestion
print("\n6. Testing Label Suggestion:")
test_contexts = [
"Fix critical bug in authentication service causing login failures",
"Add new feature to export reports to PDF format",
"Refactor backend API to extract authentication service"
]
for context in test_contexts:
suggested = await label_tools.suggest_labels(context)
print(f"\n Context: \"{context}\"")
print(f" Suggested labels: {', '.join(suggested)}")
# Final result
print("\n" + "="*60)
if all_passed:
print("✅ SUCCESS: MCP Server can fetch all 43 labels correctly!")
print("="*60)
return 0
else:
print("❌ FAILED: Label count mismatch detected")
print("="*60)
return 1
if __name__ == "__main__":
exit_code = asyncio.run(test_label_fetching())
sys.exit(exit_code)