#!/usr/bin/env python3 """Test script for validation fixes""" import logging import os # Configure minimal logging logging.basicConfig(level=logging.WARNING) logger = logging.getLogger(__name__) def validate_api_key(key: str | None, key_type: str) -> bool: """ Validate API key format without logging sensitive data. Copied from server.py for testing. """ if not key: return False if len(key) < 20: logger.warning(f"{key_type} API key too short") return False placeholder_patterns = [ "your_gemini_api_key_here", "your_openrouter_api_key_here", "your-key-here", "your_api_key", "placeholder", ] if any(placeholder in key.lower() for placeholder in placeholder_patterns): logger.warning(f"{key_type} API key appears to be a placeholder") return False if key_type == "GEMINI": if not key.startswith("AI"): logger.warning(f"{key_type} API key doesn't match expected format") return False return True def test_api_key_validation(): """Test API key validation""" test_cases = [ (None, "GEMINI", False, "None key"), ("", "GEMINI", False, "Empty key"), ("short", "GEMINI", False, "Too short"), ("your_gemini_api_key_here", "GEMINI", False, "Placeholder"), ("AIza" + "x" * 16, "GEMINI", True, "Valid Gemini key"), ("sk-" + "x" * 20, "OPENROUTER", True, "Valid OpenRouter key"), ("BadPrefix" + "x" * 20, "GEMINI", False, "Invalid Gemini prefix"), ] print("\nTesting API key validation:") print("=" * 60) passed = 0 failed = 0 for key, key_type, expected, description in test_cases: result = validate_api_key(key, key_type) status = "✓" if result == expected else "✗" if result == expected: passed += 1 else: failed += 1 print(f"{status} {description}: {result} (expected {expected})") print("=" * 60) print(f"Results: {passed} passed, {failed} failed") return failed == 0 def test_contentvariant_validation(): """Test ContentVariantRequest validation""" from tools.contentvariant import ContentVariantRequest print("\nTesting ContentVariantRequest validation:") print("=" * 60) test_cases = [ ({"content": "Test", "variation_count": 10}, True, "Valid count (10)"), ({"content": "Test", "variation_count": 5}, True, "Minimum count (5)"), ({"content": "Test", "variation_count": 25}, True, "Maximum count (25)"), ({"content": "Test", "variation_count": 3}, False, "Too low (3)"), ({"content": "Test", "variation_count": 30}, False, "Too high (30)"), ] passed = 0 failed = 0 for params, should_pass, description in test_cases: try: req = ContentVariantRequest(**params) if should_pass: print(f"✓ {description}: Accepted") passed += 1 else: print(f"✗ {description}: Should have been rejected") failed += 1 except Exception as e: if not should_pass: print(f"✓ {description}: Rejected as expected") passed += 1 else: print(f"✗ {description}: Unexpected rejection: {e}") failed += 1 print("=" * 60) print(f"Results: {passed} passed, {failed} failed") return failed == 0 if __name__ == "__main__": print("\n" + "=" * 60) print("Testing Critical & High Priority Fixes") print("=" * 60) all_passed = True all_passed &= test_api_key_validation() all_passed &= test_contentvariant_validation() print("\n" + "=" * 60) if all_passed: print("✓ All tests passed!") else: print("✗ Some tests failed") print("=" * 60 + "\n")