- verbeteringen client
- Enkel nog probleem met vertaling van de ProgressTracker constanten
This commit is contained in:
219
test_language_provider_implementation.py
Normal file
219
test_language_provider_implementation.py
Normal file
@@ -0,0 +1,219 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test script to validate the Language Provider implementation
|
||||
Tests the provider/inject pattern for translation management
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
# Add project root to path
|
||||
project_root = Path(__file__).parent
|
||||
sys.path.append(str(project_root))
|
||||
|
||||
def test_file_exists(file_path, description):
|
||||
"""Test if a file exists"""
|
||||
full_path = project_root / file_path
|
||||
exists = full_path.exists()
|
||||
status = "✅ PASS" if exists else "❌ FAIL"
|
||||
print(f"{status} - {description}: {file_path}")
|
||||
return exists
|
||||
|
||||
def test_file_contains(file_path, search_terms, description):
|
||||
"""Test if a file contains specific terms"""
|
||||
full_path = project_root / file_path
|
||||
if not full_path.exists():
|
||||
print(f"❌ FAIL - {description}: File not found - {file_path}")
|
||||
return False
|
||||
|
||||
try:
|
||||
content = full_path.read_text(encoding='utf-8')
|
||||
all_found = all(term in content for term in search_terms)
|
||||
status = "✅ PASS" if all_found else "❌ FAIL"
|
||||
print(f"{status} - {description}")
|
||||
|
||||
if not all_found:
|
||||
missing = [term for term in search_terms if term not in content]
|
||||
print(f" Missing terms: {missing}")
|
||||
|
||||
return all_found
|
||||
except Exception as e:
|
||||
print(f"❌ FAIL - {description}: Error reading file - {e}")
|
||||
return False
|
||||
|
||||
def test_javascript_syntax(file_path, description):
|
||||
"""Test JavaScript syntax using Node.js if available"""
|
||||
full_path = project_root / file_path
|
||||
if not full_path.exists():
|
||||
print(f"❌ FAIL - {description}: File not found")
|
||||
return False
|
||||
|
||||
try:
|
||||
# Try to check syntax with node if available
|
||||
result = subprocess.run(['node', '-c', str(full_path)],
|
||||
capture_output=True, text=True, timeout=10)
|
||||
if result.returncode == 0:
|
||||
print(f"✅ PASS - {description}: JavaScript syntax valid")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ FAIL - {description}: JavaScript syntax error")
|
||||
print(f" Error: {result.stderr}")
|
||||
return False
|
||||
except (subprocess.TimeoutExpired, FileNotFoundError):
|
||||
print(f"⚠️ SKIP - {description}: Node.js not available for syntax check")
|
||||
return True # Don't fail if Node.js is not available
|
||||
|
||||
def run_tests():
|
||||
"""Run all tests for the Language Provider implementation"""
|
||||
print("🧪 Testing Language Provider Implementation")
|
||||
print("=" * 50)
|
||||
|
||||
tests_passed = 0
|
||||
total_tests = 0
|
||||
|
||||
# Test 1: LanguageProvider service exists
|
||||
total_tests += 1
|
||||
if test_file_exists("eveai_chat_client/static/assets/js/services/LanguageProvider.js",
|
||||
"LanguageProvider service file exists"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 2: LanguageProvider contains required exports
|
||||
total_tests += 1
|
||||
if test_file_contains("eveai_chat_client/static/assets/js/services/LanguageProvider.js",
|
||||
["createLanguageProvider", "useLanguageProvider", "useComponentTranslations", "LANGUAGE_PROVIDER_KEY"],
|
||||
"LanguageProvider exports required functions"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 3: ChatApp.vue provides the language provider
|
||||
total_tests += 1
|
||||
if test_file_contains("eveai_chat_client/static/assets/vue-components/ChatApp.vue",
|
||||
["createLanguageProvider", "provide", "LANGUAGE_PROVIDER_KEY"],
|
||||
"ChatApp.vue provides language provider"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 4: ProgressTracker uses component translations
|
||||
total_tests += 1
|
||||
if test_file_contains("eveai_chat_client/static/assets/vue-components/ProgressTracker.vue",
|
||||
["useComponentTranslations", "progress_tracker"],
|
||||
"ProgressTracker uses component translations"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 5: SideBarExplanation uses component translations
|
||||
total_tests += 1
|
||||
if test_file_contains("eveai_chat_client/static/assets/vue-components/SideBarExplanation.vue",
|
||||
["useComponentTranslations", "sidebar_explanation"],
|
||||
"SideBarExplanation uses component translations"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 6: ChatMessage uses component translations
|
||||
total_tests += 1
|
||||
if test_file_contains("eveai_chat_client/static/assets/vue-components/ChatMessage.vue",
|
||||
["useComponentTranslations", "chat_message"],
|
||||
"ChatMessage uses component translations"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 7: LanguageSelector optionally uses provider
|
||||
total_tests += 1
|
||||
if test_file_contains("eveai_chat_client/static/assets/vue-components/LanguageSelector.vue",
|
||||
["useLanguageProvider", "providerLanguage", "effectiveCurrentLanguage"],
|
||||
"LanguageSelector optionally uses provider"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 8: Check JavaScript syntax of LanguageProvider
|
||||
total_tests += 1
|
||||
if test_javascript_syntax("eveai_chat_client/static/assets/js/services/LanguageProvider.js",
|
||||
"LanguageProvider JavaScript syntax"):
|
||||
tests_passed += 1
|
||||
|
||||
# Test 9: Verify old event-based code is removed from ProgressTracker
|
||||
total_tests += 1
|
||||
progress_tracker_path = "eveai_chat_client/static/assets/vue-components/ProgressTracker.vue"
|
||||
full_path = project_root / progress_tracker_path
|
||||
if full_path.exists():
|
||||
content = full_path.read_text(encoding='utf-8')
|
||||
old_patterns = ["handleLanguageChange", "language-changed", "translateConstants"]
|
||||
has_old_code = any(pattern in content for pattern in old_patterns)
|
||||
if not has_old_code:
|
||||
print("✅ PASS - ProgressTracker: Old event-based translation code removed")
|
||||
tests_passed += 1
|
||||
else:
|
||||
print("❌ FAIL - ProgressTracker: Still contains old event-based translation code")
|
||||
else:
|
||||
print("❌ FAIL - ProgressTracker: File not found")
|
||||
|
||||
# Test 10: Verify old event-based code is removed from ChatMessage
|
||||
total_tests += 1
|
||||
chat_message_path = "eveai_chat_client/static/assets/vue-components/ChatMessage.vue"
|
||||
full_path = project_root / chat_message_path
|
||||
if full_path.exists():
|
||||
content = full_path.read_text(encoding='utf-8')
|
||||
old_patterns = ["handleLanguageChange", "language-changed"]
|
||||
has_old_code = any(pattern in content for pattern in old_patterns)
|
||||
if not has_old_code:
|
||||
print("✅ PASS - ChatMessage: Old event-based translation code removed")
|
||||
tests_passed += 1
|
||||
else:
|
||||
print("❌ FAIL - ChatMessage: Still contains old event-based translation code")
|
||||
else:
|
||||
print("❌ FAIL - ChatMessage: File not found")
|
||||
|
||||
print("\n" + "=" * 50)
|
||||
print(f"🧪 Test Results: {tests_passed}/{total_tests} tests passed")
|
||||
|
||||
if tests_passed == total_tests:
|
||||
print("🎉 All tests passed! Language Provider implementation looks good.")
|
||||
return True
|
||||
else:
|
||||
print(f"⚠️ {total_tests - tests_passed} tests failed. Please review the implementation.")
|
||||
return False
|
||||
|
||||
def check_implementation_completeness():
|
||||
"""Check if the implementation is complete"""
|
||||
print("\n🔍 Checking Implementation Completeness")
|
||||
print("=" * 50)
|
||||
|
||||
# Check if all required files exist
|
||||
required_files = [
|
||||
"eveai_chat_client/static/assets/js/services/LanguageProvider.js",
|
||||
"eveai_chat_client/static/assets/vue-components/ChatApp.vue",
|
||||
"eveai_chat_client/static/assets/vue-components/ProgressTracker.vue",
|
||||
"eveai_chat_client/static/assets/vue-components/SideBarExplanation.vue",
|
||||
"eveai_chat_client/static/assets/vue-components/ChatMessage.vue",
|
||||
"eveai_chat_client/static/assets/vue-components/LanguageSelector.vue"
|
||||
]
|
||||
|
||||
all_exist = True
|
||||
for file_path in required_files:
|
||||
full_path = project_root / file_path
|
||||
if full_path.exists():
|
||||
print(f"✅ {file_path}")
|
||||
else:
|
||||
print(f"❌ {file_path} - MISSING")
|
||||
all_exist = False
|
||||
|
||||
return all_exist
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("🚀 Language Provider Implementation Test Suite")
|
||||
print("Testing provider/inject pattern for translation management")
|
||||
print("=" * 60)
|
||||
|
||||
# Check completeness first
|
||||
if not check_implementation_completeness():
|
||||
print("\n❌ Implementation incomplete. Please ensure all files exist.")
|
||||
sys.exit(1)
|
||||
|
||||
# Run tests
|
||||
success = run_tests()
|
||||
|
||||
if success:
|
||||
print("\n✅ Implementation validation successful!")
|
||||
print("The provider/inject pattern should resolve timing issues.")
|
||||
sys.exit(0)
|
||||
else:
|
||||
print("\n❌ Implementation validation failed!")
|
||||
print("Please review and fix the issues before proceeding.")
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user