1
0
This commit is contained in:
2025-12-22 03:19:48 +01:00
parent d6bd08d11f
commit f1c93c47b6
16 changed files with 288 additions and 31 deletions

View File

@@ -0,0 +1,80 @@
from django.test import TestCase, Client
from django.urls import reverse
from quiz.models import Course, Tag, Question, Exam
from quiz.forms import CreateQuizForm
class QuizCreationTests(TestCase):
def setUp(self):
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="Tag 1", slug="tag-1")
self.tag2 = Tag.objects.create(name="Tag 2", slug="tag-2")
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="Q1", correct_answer="A", file_path="p1")
self.q1.tags.add(self.tag1)
self.q2 = Question.objects.create(exam=self.exam2, text="Q2", correct_answer="A,B", file_path="p2")
self.q2.tags.add(self.tag2)
self.client = Client()
def test_create_quiz_form_valid(self):
form_data = {
'course': self.course1.id,
'tags': [self.tag1.id],
'question_type': ['single']
}
form = CreateQuizForm(data=form_data)
self.assertTrue(form.is_valid())
def test_create_quiz_view_post_updates_session(self):
response = self.client.post(reverse('create_quiz'), {
'course': self.course1.id,
'tags': [self.tag1.id],
'question_type': ['single']
})
self.assertRedirects(response, reverse('next_question'))
session = self.client.session
self.assertEqual(session['quiz_filter_course_id'], self.course1.id)
self.assertEqual(session['quiz_filter_tag_ids'], [self.tag1.id])
self.assertEqual(session['quiz_filter_types'], ['single'])
def test_get_next_question_respects_filters(self):
# Set session data manually
session = self.client.session
session['quiz_filter_course_id'] = self.course1.id
session.save()
# Should get Q1 (Course 1) but not Q2 (Course 2)
# Note: We need a user session for answered questions tracking,
# but the view handles anonymous users by creating a session or erroring?
# Let's check middleware. It seems middleware handles quiz_user creation.
response = self.client.get(reverse('next_question'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Q1")
# Now change filter to Course 2
session['quiz_filter_course_id'] = self.course2.id
session.save()
response = self.client.get(reverse('next_question'))
self.assertContains(response, "Q2")
def test_filter_by_type(self):
session = self.client.session
session['quiz_filter_types'] = ['multi']
session.save()
response = self.client.get(reverse('next_question'))
self.assertContains(response, "Q2") # Q2 is multi (A,B)
session['quiz_filter_types'] = ['single']
session.save()
response = self.client.get(reverse('next_question'))
self.assertContains(response, "Q1") # Q1 is single (A)