#!/usr/bin/env python """ Django Admin Smoke Test Script Tests that all admin pages return 200 and language switching works. Run from chunyu_project directory: python _test_admin_smoke.py """ import os import sys # Setup Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'chunyu_project.settings') # Admin URLs to test ADMIN_URLS = [ '/admin/', '/admin/user/fuser/', '/admin/user/fuser/add/', '/admin/article/article/', '/admin/article/article/add/', '/admin/bug/bugreport/', '/admin/learn/course/', '/admin/tool/tool/', '/admin/history/browsinghistory/', '/admin/app/changelog/', '/admin/i18n/setlang/', ] LANGUAGES = ['zh-hans', 'en', 'ja', 'ko', 'ru'] # Test credentials (from create_admin_user.py) TEST_USERNAME = 'test@example.com' TEST_PASSWORD = 'admin123456' def test_admin_smoke(): """Test admin pages with all languages.""" import django django.setup() from django.test import Client from django.contrib.auth import get_user_model User = get_user_model() client = Client() # Get or verify admin user exists admin_user = User.objects.filter(username=TEST_USERNAME).first() if not admin_user: # Try test_admin admin_user = User.objects.filter(username='test_admin').first() if not admin_user: print("ERROR: No admin user found. Run create_admin_user.py first.") sys.exit(1) # Login logged_in = client.login(username=admin_user.username, password=TEST_PASSWORD) if not logged_in: print(f"WARNING: Login failed for {admin_user.username}. Trying to login anyway...") print("=" * 60) print("Django Admin Smoke Test") print("=" * 60) errors = [] total_tests = 0 passed_tests = 0 # Test language switching print("\n[1] Testing language switching...") for lang in LANGUAGES: total_tests += 1 response = client.post( '/i18n/setlang/', {'language': lang, 'next': '/admin/'} ) if response.status_code in [200, 302]: print(f" ✓ Language switch to {lang}: {response.status_code}") passed_tests += 1 else: print(f" ✗ Language switch to {lang}: {response.status_code}") errors.append(f"Language switch to {lang}: {response.status_code}") # Test admin pages in each language print("\n[2] Testing admin pages with default language (zh-hans)...") for url in ADMIN_URLS: total_tests += 1 response = client.get(url) if response.status_code == 200: print(f" ✓ {url}: {response.status_code}") passed_tests += 1 else: print(f" ✗ {url}: {response.status_code}") errors.append(f"{url}: {response.status_code}") # Test admin pages in English print("\n[3] Testing admin pages in English...") client.post('/i18n/setlang/', {'language': 'en', 'next': '/admin/'}) for url in ADMIN_URLS[:5]: # Test a subset total_tests += 1 response = client.get(url) if response.status_code == 200: print(f" ✓ {url}: {response.status_code}") passed_tests += 1 else: print(f" ✗ {url}: {response.status_code}") errors.append(f"EN {url}: {response.status_code}") # Summary print("\n" + "=" * 60) print(f"Results: {passed_tests}/{total_tests} tests passed") print("=" * 60) if errors: print("\nErrors found:") for error in errors: print(f" - {error}") sys.exit(1) else: print("\n✓ All smoke tests passed!") sys.exit(0) if __name__ == '__main__': test_admin_smoke()