From 24e3c2701da1f4480497424a26cb0163d2d1c79a Mon Sep 17 00:00:00 2001 From: Tom Walker Date: Tue, 24 Jun 2014 16:08:14 +0100 Subject: [PATCH] removed an unnecessary print from quiz_tags, added all tests for anon users sitting tests including an improvement to the view to reset between subsequent attempts at a quiz --- quiz/templatetags/quiz_tags.py | 1 - quiz/tests.py | 74 +++++++++++++++++++++++++++++++--- quiz/views.py | 4 +- 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/quiz/templatetags/quiz_tags.py b/quiz/templatetags/quiz_tags.py index 49ad25b..02d7f27 100644 --- a/quiz/templatetags/quiz_tags.py +++ b/quiz/templatetags/quiz_tags.py @@ -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) diff --git a/quiz/tests.py b/quiz/tests.py index afebe93..ebe1fc8 100644 --- a/quiz/tests.py +++ b/quiz/tests.py @@ -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): diff --git a/quiz/views.py b/quiz/views.py index 8b977f8..7aa94a4 100644 --- a/quiz/views.py +++ b/quiz/views.py @@ -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', -- 2.39.5