vault backup: 2025-12-26 02:09:22
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 2m29s
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 2m29s
This commit is contained in:
184
stroma/quiz/tests/test_admin.py
Normal file
184
stroma/quiz/tests/test_admin.py
Normal file
@@ -0,0 +1,184 @@
|
||||
import pytest
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse
|
||||
from quiz.models import QuizUser, Question, Option, QuizResult
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@pytest.mark.admin
|
||||
class TestAdminPages:
|
||||
"""Test that all admin pages render without errors"""
|
||||
|
||||
@pytest.fixture
|
||||
def admin_client(self, client, django_user_model, db):
|
||||
"""Create authenticated admin client"""
|
||||
admin_user = django_user_model.objects.create_superuser(
|
||||
username='testadmin',
|
||||
email='admin@test.com',
|
||||
password='admin123'
|
||||
)
|
||||
client.force_login(admin_user)
|
||||
return client
|
||||
|
||||
@pytest.fixture
|
||||
def test_data(self, db):
|
||||
"""Create test data"""
|
||||
quiz_user = QuizUser.objects.create(session_key='test_session_123')
|
||||
|
||||
question = Question.objects.create(
|
||||
file_path='test/question1.md',
|
||||
text='Test question?',
|
||||
correct_answer='A',
|
||||
file_mtime=1234567890.0
|
||||
)
|
||||
|
||||
Option.objects.create(question=question, letter='A', text='Correct answer')
|
||||
Option.objects.create(question=question, letter='B', text='Wrong answer')
|
||||
|
||||
quiz_result = QuizResult.objects.create(
|
||||
user=quiz_user,
|
||||
question=question,
|
||||
selected_answer='A',
|
||||
is_correct=True
|
||||
)
|
||||
|
||||
return {
|
||||
'quiz_user': quiz_user,
|
||||
'question': question,
|
||||
'quiz_result': quiz_result
|
||||
}
|
||||
|
||||
def test_admin_index(self, admin_client):
|
||||
"""Test admin index page"""
|
||||
response = admin_client.get(reverse('admin:index'))
|
||||
assert response.status_code == 200
|
||||
assert 'Site administration' in response.content.decode()
|
||||
|
||||
def test_question_changelist(self, admin_client, test_data):
|
||||
"""Test Question list page"""
|
||||
response = admin_client.get(reverse('admin:quiz_question_changelist'))
|
||||
assert response.status_code == 200
|
||||
assert 'Test question?' in response.content.decode()
|
||||
|
||||
def test_question_add(self, admin_client):
|
||||
"""Test Question add page"""
|
||||
response = admin_client.get(reverse('admin:quiz_question_add'))
|
||||
assert response.status_code == 200
|
||||
assert 'Add question' in response.content.decode()
|
||||
|
||||
def test_question_change(self, admin_client, test_data):
|
||||
"""Test Question change/edit page"""
|
||||
response = admin_client.get(
|
||||
reverse('admin:quiz_question_change', args=[test_data['question'].pk])
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Test question?' in response.content.decode()
|
||||
assert 'Correct answer' in response.content.decode()
|
||||
|
||||
def test_question_delete(self, admin_client, test_data):
|
||||
"""Test Question delete page"""
|
||||
response = admin_client.get(
|
||||
reverse('admin:quiz_question_delete', args=[test_data['question'].pk])
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Are you sure' in response.content.decode()
|
||||
|
||||
def test_option_add(self, admin_client):
|
||||
"""Test Option add page"""
|
||||
response = admin_client.get(reverse('admin:quiz_option_add'))
|
||||
assert response.status_code == 200
|
||||
assert 'Add option' in response.content.decode()
|
||||
|
||||
def test_option_change(self, admin_client, test_data):
|
||||
"""Test Option change/edit page"""
|
||||
option = test_data['question'].options.first()
|
||||
response = admin_client.get(
|
||||
reverse('admin:quiz_option_change', args=[option.pk])
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Correct answer' in response.content.decode()
|
||||
|
||||
def test_quizuser_changelist(self, admin_client, test_data):
|
||||
"""Test QuizUser list page"""
|
||||
response = admin_client.get(reverse('admin:quiz_quizuser_changelist'))
|
||||
assert response.status_code == 200
|
||||
assert 'test_session' in response.content.decode()
|
||||
|
||||
def test_quizuser_add(self, admin_client):
|
||||
"""Test QuizUser add page"""
|
||||
response = admin_client.get(reverse('admin:quiz_quizuser_add'))
|
||||
assert response.status_code == 200
|
||||
assert 'Add Quiz User' in response.content.decode()
|
||||
|
||||
def test_quizuser_change(self, admin_client, test_data):
|
||||
"""Test QuizUser change/edit page"""
|
||||
response = admin_client.get(
|
||||
reverse('admin:quiz_quizuser_change', args=[test_data['quiz_user'].pk])
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'test_session' in response.content.decode()
|
||||
|
||||
def test_quizresult_changelist(self, admin_client, test_data):
|
||||
"""Test QuizResult list page"""
|
||||
response = admin_client.get(reverse('admin:quiz_quizresult_changelist'))
|
||||
assert response.status_code == 200
|
||||
assert 'Test question' in response.content.decode()
|
||||
|
||||
def test_quizresult_add(self, admin_client):
|
||||
"""Test QuizResult add page"""
|
||||
response = admin_client.get(reverse('admin:quiz_quizresult_add'))
|
||||
assert response.status_code == 200
|
||||
assert 'Add quiz result' in response.content.decode()
|
||||
|
||||
def test_quizresult_change(self, admin_client, test_data):
|
||||
"""Test QuizResult change/edit page"""
|
||||
response = admin_client.get(
|
||||
reverse('admin:quiz_quizresult_change', args=[test_data['quiz_result'].pk])
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Test question' in response.content.decode()
|
||||
|
||||
def test_admin_custom_displays(self, admin_client, test_data):
|
||||
"""Test custom admin display methods render correctly"""
|
||||
# Question admin with custom fields
|
||||
response = admin_client.get(reverse('admin:quiz_question_changelist'))
|
||||
assert 'question1.md' in response.content.decode()
|
||||
|
||||
# QuizUser admin with score percentage
|
||||
response = admin_client.get(reverse('admin:quiz_quizuser_changelist'))
|
||||
assert '100.0%' in response.content.decode()
|
||||
|
||||
# QuizResult admin with result status
|
||||
response = admin_client.get(reverse('admin:quiz_quizresult_changelist'))
|
||||
assert 'Correct' in response.content.decode()
|
||||
|
||||
def test_admin_search(self, admin_client, test_data):
|
||||
"""Test admin search functionality"""
|
||||
response = admin_client.get(
|
||||
reverse('admin:quiz_question_changelist') + '?q=Test'
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Test question?' in response.content.decode()
|
||||
|
||||
def test_admin_filters(self, admin_client, test_data):
|
||||
"""Test admin filter functionality"""
|
||||
response = admin_client.get(
|
||||
reverse('admin:quiz_quizresult_changelist') + '?is_correct__exact=1'
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
@pytest.mark.parametrize('url_name', [
|
||||
'admin:index',
|
||||
'admin:quiz_question_changelist',
|
||||
'admin:quiz_question_add',
|
||||
'admin:quiz_quizuser_changelist',
|
||||
'admin:quiz_quizuser_add',
|
||||
'admin:quiz_quizresult_changelist',
|
||||
'admin:quiz_quizresult_add',
|
||||
])
|
||||
def test_all_admin_pages_no_errors(self, admin_client, test_data, url_name):
|
||||
"""Integration test: verify no admin pages return errors"""
|
||||
url = reverse(url_name)
|
||||
response = admin_client.get(url)
|
||||
assert response.status_code == 200, f"Failed to load {url}"
|
||||
|
||||
Reference in New Issue
Block a user