Files
chunyu_project/_test_admin_smoke.py
2026-08-05 23:59:15 +08:00

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()