#!/usr/bin/env python3
"""Test script for AnkiConnect client."""
from mcp_server_anki.anki_client import AnkiConnectClient
def test_list_decks():
"""Test listing all decks."""
print("\n=== Testing list_decks ===")
client = AnkiConnectClient()
try:
decks = client.get_deck_names()
print(f"✓ Success! Found {len(decks)} decks:")
for deck in decks:
print(f" - {deck}")
return True
except Exception as e:
print(f"✗ Error: {e}")
return False
def test_create_deck():
"""Test creating a new deck."""
print("\n=== Testing create_deck ===")
client = AnkiConnectClient()
deck_name = "MCP Test Deck"
try:
deck_id = client.create_deck(deck_name)
print(f"✓ Success! Created deck '{deck_name}' with ID: {deck_id}")
return True
except Exception as e:
print(f"✗ Error: {e}")
return False
def test_create_card():
"""Test creating a card in a deck."""
print("\n=== Testing create_card ===")
client = AnkiConnectClient()
deck_name = "MCP Test Deck"
front = "What is the CAP theorem?"
back = "Consistency, Availability, Partition Tolerance trade-off"
tags = ["system-design", "distributed-systems"]
try:
note_id = client.create_card(deck_name, front, back, tags)
print(f"✓ Success! Created card with note ID: {note_id}")
print(f" Front: {front}")
print(f" Back: {back}")
print(f" Tags: {tags}")
return True
except Exception as e:
print(f"✗ Error: {e}")
return False
def test_list_cards():
"""Test listing cards from a deck."""
print("\n=== Testing list_cards ===")
client = AnkiConnectClient()
deck_name = "MCP Test Deck"
try:
cards = client.get_cards_in_deck(deck_name)
print(f"✓ Success! Found {len(cards)} cards in '{deck_name}':")
for card in cards:
print(f"\n Note ID: {card['note_id']}")
print(f" Front: {card['fields'].get('Front', 'N/A')}")
print(f" Back: {card['fields'].get('Back', 'N/A')}")
print(f" Tags: {card['tags']}")
return True
except Exception as e:
print(f"✗ Error: {e}")
return False
def test_error_handling():
"""Test error handling with non-existent deck."""
print("\n=== Testing error_handling ===")
client = AnkiConnectClient()
try:
cards = client.get_cards_in_deck("NonExistentDeck12345")
print(f"✗ Should have raised an error!")
return False
except ValueError as e:
print(f"✓ Success! Correctly caught error: {e}")
return True
except Exception as e:
print(f"✗ Unexpected error: {e}")
return False
def main():
"""Run all tests."""
print("=" * 60)
print("Starting Anki MCP Server Tests")
print("=" * 60)
results = []
# Test 1: List existing decks
results.append(("list_decks", test_list_decks()))
# Test 2: Create a new deck
results.append(("create_deck", test_create_deck()))
# Test 3: Create a card
results.append(("create_card", test_create_card()))
# Test 4: List cards in the deck
results.append(("list_cards", test_list_cards()))
# Test 5: Error handling
results.append(("error_handling", test_error_handling()))
# Summary
print("\n" + "=" * 60)
print("Test Summary")
print("=" * 60)
passed = sum(1 for _, result in results if result)
total = len(results)
for test_name, result in results:
status = "✓ PASS" if result else "✗ FAIL"
print(f"{status}: {test_name}")
print(f"\nPassed: {passed}/{total}")
if passed == total:
print("\n🎉 All tests passed!")
else:
print(f"\n⚠️ {total - passed} test(s) failed")
if __name__ == "__main__":
main()