127 lines
3.6 KiB
Python
127 lines
3.6 KiB
Python
#!/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()
|