1
0
Files
medical-notes/stroma/quiz/tests/test_quiz_creation.py
Johan Dahlin 50366b9b9c
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 2m29s
vault backup: 2025-12-26 02:09:22
2025-12-26 02:09:22 +01:00

86 lines
3.3 KiB
Python

import pytest
from django.urls import reverse
from quiz.models import Course, Tag, Question, Exam, QuizUser, QuizSession
from quiz.forms import CreateQuizForm
@pytest.mark.django_db
class TestQuizCreation:
@pytest.fixture(autouse=True)
def setup_data(self, client: pytest.FixtureRequest) -> None:
# Clear database to ensure fresh state
Question.objects.all().delete()
Tag.objects.all().delete()
QuizSession.objects.all().delete()
Course.objects.all().delete()
self.client = client
s = self.client.session
s.save()
self.user = QuizUser.objects.create(session_key=s.session_key)
self.course1 = Course.objects.create(name="Course 1", code="C1")
self.course2 = Course.objects.create(name="Course 2", code="C2")
self.tag1 = Tag.objects.create(name="Tag1", slug="tag-1")
self.exam1 = Exam.objects.create(course=self.course1, date="2023-01-01")
self.exam2 = Exam.objects.create(course=self.course2, date="2023-01-02")
self.q1 = Question.objects.create(
exam=self.exam1, text="UNIQUE_Q1_TEXT", correct_answer="A", file_path="path1"
)
self.q1.tags.add(self.tag1)
self.q2 = Question.objects.create(
exam=self.exam2, text="UNIQUE_Q2_TEXT", correct_answer="A,B", file_path="path2"
)
def test_create_quiz_form_valid(self) -> None:
form_data = {
'course': self.course1.id,
'tags': [self.tag1.id],
'question_type': ['single']
}
form = CreateQuizForm(data=form_data)
assert form.is_valid()
def test_create_quiz_view_post(self) -> None:
response = self.client.post(reverse('quiz:create_quiz'), {
'course': self.course1.id,
'tags': [self.tag1.id],
'question_type': ['single']
})
session = QuizSession.objects.get(user=self.user)
assert response.status_code == 302
assert response.url == reverse('quiz:quiz_mode', args=[session.id])
assert session.course.id == self.course1.id
assert list(session.tags.values_list('id', flat=True)) == [self.tag1.id]
assert session.question_types == ['single']
def test_get_next_question_filters(self) -> None:
session = QuizSession.objects.create(user=self.user, course=self.course1)
response = self.client.get(reverse('quiz:next_question', args=[session.id]))
assert response.status_code == 200
assert "UNIQUE_Q1_TEXT" in response.content.decode()
# Now change filter to Course 2
session.course = self.course2
session.save()
response = self.client.get(reverse('quiz:next_question', args=[session.id]))
assert "UNIQUE_Q2_TEXT" in response.content.decode()
def test_filter_by_type(self) -> None:
session = QuizSession.objects.create(user=self.user, question_types=['multi'])
response = self.client.get(reverse('quiz:next_question', args=[session.id]))
assert "UNIQUE_Q2_TEXT" in response.content.decode()
session.question_types = ['single']
session.save()
response = self.client.get(reverse('quiz:next_question', args=[session.id]))
assert "UNIQUE_Q1_TEXT" in response.content.decode()