update
This commit is contained in:
80
quiz/tests/test_quiz_creation.py
Normal file
80
quiz/tests/test_quiz_creation.py
Normal 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)
|
||||
Reference in New Issue
Block a user