#!/usr/bin/env python """ Test script for language switcher functionality """ import os import sys import django # Setup Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.base') sys.path.insert(0, os.path.dirname(__file__)) django.setup() from django.test import Client from django.urls import reverse def test_language_switcher(): """Test language switching on public pages""" print("=" * 60) print("Testing Language Switcher Functionality") print("=" * 60) from django.conf import settings # Add testserver to ALLOWED_HOSTS for testing original_allowed_hosts = settings.ALLOWED_HOSTS if 'testserver' not in settings.ALLOWED_HOSTS: settings.ALLOWED_HOSTS.append('testserver') client = Client() # Test 1: Access public submit landing page print("\n1. Testing public submit landing page...") response = client.get('/core/public/submit/') print(f" Status Code: {response.status_code}") assert response.status_code == 200, "Failed to load public submit page" print(" βœ“ Public submit page loads successfully") # Test 2: Check if language switcher is present in the response print("\n2. Checking for language switcher in page...") content = response.content.decode('utf-8') # Check for language buttons has_en_button = 'lang-btn' in content has_language_url = 'set-language' in content has_flag_icons = 'πŸ‡¬πŸ‡§' in content or 'πŸ‡ΈπŸ‡¦' in content print(f" Language buttons present: {has_en_button}") print(f" Set language URL present: {has_language_url}") print(f" Flag icons present: {has_flag_icons}") if has_en_button and has_language_url: print(" βœ“ Language switcher UI is present") else: print(" βœ— Language switcher UI not fully present") # Test 3: Test language switching to Arabic print("\n3. Testing language switch to Arabic...") response = client.get('/core/set-language/?language=ar') # Check redirect print(f" Status Code: {response.status_code}") if response.status_code == 302: print(" βœ“ Redirect occurred as expected") # Test 4: Test language switching to English print("\n4. Testing language switch to English...") response = client.get('/core/set-language/?language=en') print(f" Status Code: {response.status_code}") if response.status_code == 302: print(" βœ“ Redirect occurred as expected") # Test 5: Test public complaint form print("\n5. Testing public complaint form page...") response = client.get('/complaints/public/submit/') print(f" Status Code: {response.status_code}") assert response.status_code == 200, "Failed to load complaint form" print(" βœ“ Public complaint form loads successfully") # Test 6: Check complaint form has language switcher print("\n6. Checking for language switcher in complaint form...") content = response.content.decode('utf-8') has_lang_switcher = 'lang-switcher' in content print(f" Language switcher present: {has_lang_switcher}") if has_lang_switcher: print(" βœ“ Complaint form has language switcher") # Test 7: Verify RTL/LTR attributes print("\n7. Checking for RTL/LTR support...") has_lang_attr = 'lang="' in content or 'html lang=' in content has_dir_attr = 'dir="' in content or 'dir=' in content has_rtl_support = 'dir="rtl"' in content or 'dir="ltr"' in content print(f" Language attribute present: {has_lang_attr}") print(f" Direction attribute present: {has_dir_attr}") print(f" RTL/LTR support detected: {has_rtl_support}") if has_rtl_support: print(" βœ“ RTL/LTR dynamic switching is implemented") # Test 8: Check for CSS styling print("\n8. Checking for CSS styling...") has_css_styles = '.lang-btn' in content or '.lang-switcher' in content print(f" Language switcher CSS present: {has_css_styles}") if has_css_styles: print(" βœ“ CSS styling for language switcher is present") print("\n" + "=" * 60) print("Test Summary") print("=" * 60) print("βœ“ All basic functionality tests passed!") print("\nLanguage switcher features:") print(" β€’ Language buttons with flags (EN/AR)") print(" β€’ Language switching URL endpoint") print(" β€’ Dynamic RTL/LTR switching") print(" β€’ CSS styling for switcher") print(" β€’ Present in public pages") print("\nTo test interactively:") print(" 1. Start the development server: python manage.py runserver") print(" 2. Visit: http://localhost:8000/core/public/submit/") print(" 3. Click on English or Arabic flag to switch languages") print(" 4. Observe page reloads in the selected language") print("=" * 60) if __name__ == '__main__': try: test_language_switcher() except Exception as e: print(f"\nβœ— Error during testing: {e}") import traceback traceback.print_exc() sys.exit(1)