All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 2m29s
86 lines
3.3 KiB
Python
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()
|