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:
85
stroma/quiz/tests/test_quiz_creation.py
Normal file
85
stroma/quiz/tests/test_quiz_creation.py
Normal file
@@ -0,0 +1,85 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user