mtg_python_deckbuilder/code/tests/test_final_fuzzy.py
matt 3e4395d6e9 feat: complete include/exclude observability, fix validation bugs, and organize tests
- Add structured logging for include/exclude operations with comprehensive event tracking
- Fix duplicate counting bug in validation API by eliminating double validation passes
- Simplify color identity validation UX by consolidating into single 'illegal' status
- Organize project structure by moving all test files to centralized code/tests/ directory
- Update documentation reflecting feature completion and production readiness
- Add validation test scripts and performance benchmarks confirming targets met
- Finalize include/exclude feature as production-ready with EDH format compliance
2025-09-09 20:18:03 -07:00

67 lines
2.4 KiB
Python

#!/usr/bin/env python3
"""Test the improved fuzzy matching and modal styling"""
import requests
test_cases = [
("lightn", "Should find Lightning cards"),
("lightni", "Should find Lightning with slight typo"),
("bolt", "Should find Bolt cards"),
("bligh", "Should find Blightning"),
("unknowncard", "Should trigger confirmation modal"),
("ligth", "Should find Light cards"),
("boltt", "Should find Bolt with typo")
]
for input_text, description in test_cases:
print(f"\n🔍 Testing: '{input_text}' ({description})")
print("=" * 60)
test_data = {
"include_cards": input_text,
"exclude_cards": "",
"commander": "",
"enforcement_mode": "warn",
"allow_illegal": "false",
"fuzzy_matching": "true"
}
try:
response = requests.post(
"http://localhost:8080/build/validate/include_exclude",
data=test_data,
timeout=10
)
if response.status_code == 200:
data = response.json()
# Check results
if data.get("confirmation_needed"):
print(f"🔄 Confirmation modal would show:")
for item in data["confirmation_needed"]:
print(f" Input: '{item['input']}'")
print(f" Confidence: {item['confidence']:.1%}")
print(f" Suggestions: {item['suggestions'][:3]}")
elif data.get("includes", {}).get("legal"):
legal = data["includes"]["legal"]
fuzzy = data["includes"].get("fuzzy_matches", {})
if input_text in fuzzy:
print(f"✅ Auto-accepted fuzzy match: '{input_text}''{fuzzy[input_text]}'")
else:
print(f"✅ Exact match: {legal}")
elif data.get("includes", {}).get("illegal"):
print(f"❌ No matches found")
else:
print(f"❓ Unclear result")
else:
print(f"❌ HTTP {response.status_code}")
except Exception as e:
print(f"❌ EXCEPTION: {e}")
print(f"\n🎯 Summary:")
print("✅ Enhanced prefix matching prioritizes Lightning cards for 'lightn'")
print("✅ Dark theme modal styling implemented")
print("✅ Confidence threshold set to 95% for more confirmations")
print("💡 Ready for user testing in web UI!")