]> git.parisson.com Git - django_quiz.git/commitdiff
removed an unnecessary print from quiz_tags, added all tests for anon users sitting...
authorTom Walker <tomwalker0472@gmail.com>
Tue, 24 Jun 2014 15:08:14 +0000 (16:08 +0100)
committerTom Walker <tomwalker0472@gmail.com>
Tue, 24 Jun 2014 15:08:14 +0000 (16:08 +0100)
quiz/templatetags/quiz_tags.py
quiz/tests.py
quiz/views.py

index 49ad25beee68a1eb0a7d02a6cafaee00234e3607..02d7f278f1fe3d7a4c545e8ca5f679cdf89b0830 100644 (file)
@@ -6,7 +6,6 @@ register = template.Library()
 @register.inclusion_tag('answers_for_mc_question.html', takes_context=True)
 def answers_for_mc_question(context, question):
     answers = Answer.objects.filter(question__id=question.id).order_by('?')
-    print answers
     return {'answers': answers,}
 
 @register.inclusion_tag('correct_answer.html', takes_context=True)
index afebe9321b5d8d31500767a0d6fe8260e50165b6..ebe1fc8f9e172251f89dca7f3225b1e6064fff3a 100644 (file)
@@ -9,7 +9,7 @@ from django.test.client import Client, RequestFactory
 
 from quiz.models import Category, Quiz, Progress, Sitting, Question
 from quiz.views import quiz_take
-from multichoice.models import MCQuestion
+from multichoice.models import MCQuestion, Answer
 from true_false.models import TF_Question
 
 class TestCategory(TestCase):
@@ -313,7 +313,15 @@ class TestQuestionViewsAnon(TestCase):
                                               content = "squeek",)
         question2.quiz.add(quiz1)
 
-        self.factory = RequestFactory()
+        Answer.objects.create(id = 123,
+                              question = question1,
+                              content = "bing",
+                              correct = False,)
+
+        Answer.objects.create(id = 456,
+                              question = question2,
+                              content = "bong",
+                              correct = True,)
 
     def test_quiz_take_anon_view_only(self):
         found = resolve('/q/tq1/')
@@ -337,8 +345,8 @@ class TestQuestionViewsAnon(TestCase):
         self.assertTemplateUsed('question.html')
 
         session = self.client.session
-        session.set_expiry(1) # session is set when user first
-        session.save()        # accesses a quiz
+        session.set_expiry(1) # session is set when user first starts a
+        session.save()        # quiz, not on subsequent visits
 
         response2 = self.client.get('/q/tq1/')
         self.assertEqual(self.client.session.get_expiry_age(), 1)
@@ -347,8 +355,64 @@ class TestQuestionViewsAnon(TestCase):
         self.assertEqual(self.client.session['page_count'], 0)
 
     def test_quiz_take_anon_submit(self):
+        # show first question
         response = self.client.get('/q/tq1/')
-
+        self.assertNotContains(response, 'previous question')
+        first_question = response.context['question']
+
+        # submit first answer
+        response = self.client.get('/q/tq1/',
+                                   {'guess': '123',
+                                    'question_id':
+                                    self.client.session['1_q_list'][0],})
+
+        self.assertContains(response, 'previous question', status_code = 200)
+        self.assertContains(response, 'incorrect')
+        self.assertContains(response, 'Explanation:')
+        self.assertContains(response, 'squeek')
+        self.assertEqual(self.client.session['1_q_list'], [2])
+        self.assertEqual(self.client.session['session_score'], 0)
+        self.assertEqual(self.client.session['session_score_possible'], 1)
+        self.assertEqual(response.context['previous'],
+                         {'previous_answer': '123',
+                          'previous_outcome': 'incorrect',
+                          'previous_question': first_question,})
+        self.assertTemplateUsed('question.html')
+        second_question = response.context['question']
+
+        # submit second and final answer of quiz, show final result page
+        response = self.client.get('/q/tq1/',
+                                   {'guess': '456',
+                                    'question_id':
+                                    self.client.session['1_q_list'][0],})
+
+        self.assertContains(response, 'previous question', status_code = 200)
+        self.assertNotContains(response, 'incorrect')
+        self.assertContains(response, 'Explanation:')
+        self.assertContains(response, 'results')
+        self.assertNotIn('1_q_list', self.client.session)
+        self.assertEqual(response.context['score'], 1)
+        self.assertEqual(response.context['max_score'], 2)
+        self.assertEqual(response.context['percent'], 50)
+        self.assertEqual(response.context['session'], 1)
+        self.assertEqual(response.context['possible'], 2)
+        self.assertEqual(response.context['previous'],
+                         {'previous_answer': '456',
+                          'previous_outcome': 'correct',
+                          'previous_question': second_question,})
+        self.assertTemplateUsed('result.html')
+
+        # quiz restarts
+        response = self.client.get('/q/tq1/')
+        self.assertNotContains(response, 'previous question')
+
+        # session score continues to increase
+        response = self.client.get('/q/tq1/',
+                                   {'guess': '123',
+                                    'question_id':
+                                    self.client.session['1_q_list'][0],})
+        self.assertEqual(self.client.session['session_score'], 1)
+        self.assertEqual(self.client.session['session_score_possible'], 3)
 
 class TestQuestionViewsUser(TestCase):
 
index 8b977f86f8b1f1c74918b21906e04967d94b0bef..7aa94a4e49adb83faf89d55866ab238a5db328c7 100644 (file)
@@ -188,14 +188,14 @@ def user_load_next_question(request, sitting, quiz):
 
 def final_result_anon(request, quiz, previous):
     quiz_id = str(quiz.id)
-    score = quiz_id + "_score"
-    score = request.session[score]
+    score = request.session[quiz_id + "_score"]
     max_score = quiz.question_set.all().select_subclasses().count()
     percent = int(round((float(score) / max_score) * 100))
     if score == 0:
         score = "nil points"
 
     session_score, session_possible = anon_session_score(request)
+    del request.session[quiz_id + "_q_list"]
 
     if quiz.answers_at_end == False:
         return render_to_response('result.html',