]> git.parisson.com Git - django_quiz.git/commitdiff
Working on the tests for the template tags. Updated to show which selection you chose...
authorTom Walker <tomwalker0472@gmail.com>
Thu, 26 Jun 2014 21:49:09 +0000 (22:49 +0100)
committerTom Walker <tomwalker0472@gmail.com>
Thu, 26 Jun 2014 21:49:09 +0000 (22:49 +0100)
quiz/templates/correct_answer.html
quiz/templates/question.html
quiz/templatetags/quiz_tags.py
quiz/tests.py

index 1edf21408c19daec40c93f4c50c48b9aacb0ce4e..a0a98b65ff3627c75e8d079a1945e0a727bf87e6 100644 (file)
@@ -1,37 +1,30 @@
 
-{% if user_was_incorrect %}
 
-       <div class="alert alert-warning">
-
-               <strong>You answered the above question incorrectly</strong>
-
-       </div>
-
-{% else %}
-
-       <div class="alert alert-success">
-
-               <strong>You answered the above question correctly</strong>
-
-       </div>
-
-{% endif %}
 
 <table class="table table-striped table-bordered">
   <tbody>
 
        {% for answer in answers %}
 
+
+
       {% if answer.correct %}
 
            <tr class="success">
                  <td>{{ answer.content }}</td>
                  <td><strong>This is the correct answer</strong></td>
 
+
       {% else %}
                <tr>
          <td>{{ answer.content }}</td>
-                 <td></td>
+                 <td>
+                       {% ifequal question_type 'MCQuestion' %}
+                         {% if answer.id == previous_answer_id %}
+                           This was your answer.
+                         {% endif %}
+                       {% endifequal %}
+                 </td>
 
          {% endif %}
            </tr>
index 7cfd37f06cffc8f1db4e48ec01b6a9009cbf3594..a939c614744528a461ad0175bf2369b41ce52c9e 100644 (file)
@@ -18,7 +18,7 @@
         {% ifequal previous.previous_outcome 'correct' %}
                        <div class="alert alert-success">
                {% else %}
-                       <div class="alert alert-error">
+                       <div class="alert alert-warning">
                {% endifequal %}
 
                        <p><small>Your answer was </small><strong>{{ previous.previous_outcome }}</strong></p>
index 8543c04842ff8dc7c322fdbebe42146284e94eac..811bf7db2a937c0f2253b24ba462e89ba75d4ea7 100644 (file)
@@ -1,4 +1,6 @@
 from django import template
+from django.shortcuts import get_list_or_404
+
 from multichoice.models import Answer
 
 register = template.Library()
@@ -17,22 +19,19 @@ def correct_answer(context, previous):
 
     if q.__class__.__name__ == "MCQuestion":
         answers = Answer.objects.filter(question__id=q.id)
+        previous_answer_id = int(context['previous']['previous_answer'])
+        return {'answers': answers,
+                'question_type': q.__class__.__name__,
+                'previous_answer_id': previous_answer_id}
 
     if q.__class__.__name__ == "TF_Question":
         answers = [{'correct': q.check_if_correct('T'),
                     'content': 'True'},
                    {'correct': q.check_if_correct('F'),
                     'content': 'False'}]
+        return {'answers': answers,
+                'question_type': q.__class__.__name__,}
 
-    return {'answers': answers, }
-
-@register.inclusion_tag('correct_answer.html', takes_context=True)
-def correct_answer_for_all(context, question):
-    """
-    processes the correct answer based on a given question object
-    """
-    answers = Answer.objects.filter(question__id=question.id)
-    return {'answers': answers, }
 
 @register.inclusion_tag('correct_answer.html', takes_context=True)
 def correct_answer_for_all_with_users_incorrect(context, question, incorrect_list):
index fee80603df20dedf85c392928ef11f5b2451a8f1..06205e292269e580c1af0d436ea647ddc0c7ad6e 100644 (file)
@@ -5,6 +5,7 @@ from django.core.urlresolvers import resolve
 from django.http import HttpRequest
 from django.test import TestCase
 from django.test.client import Client, RequestFactory
+from django.template import Template, Context
 
 
 from quiz.models import Category, Quiz, Progress, Sitting, Question
@@ -14,10 +15,10 @@ from true_false.models import TF_Question
 
 class TestCategory(TestCase):
     def setUp(self):
-        Category.objects.new_category(category = "elderberries")
-        Category.objects.new_category(category = "straw.berries")
-        Category.objects.new_category(category = "black berries")
-        Category.objects.new_category(category = "squishy   berries")
+        Category.objects.new_category(category = 'elderberries')
+        Category.objects.new_category(category = 'straw.berries')
+        Category.objects.new_category(category = 'black berries')
+        Category.objects.new_category(category = 'squishy   berries')
 
     def test_categories(self):
         c1 = Category.objects.get(id = 1)
@@ -25,30 +26,30 @@ class TestCategory(TestCase):
         c3 = Category.objects.get(id = 3)
         c4 = Category.objects.get(id = 4)
 
-        self.assertEqual(c1.category, "elderberries")
-        self.assertEqual(c2.category, "straw.berries")
-        self.assertEqual(c3.category, "black-berries")
-        self.assertEqual(c4.category, "squishy-berries")
+        self.assertEqual(c1.category, 'elderberries')
+        self.assertEqual(c2.category, 'straw.berries')
+        self.assertEqual(c3.category, 'black-berries')
+        self.assertEqual(c4.category, 'squishy-berries')
 
 class TestQuiz(TestCase):
     def setUp(self):
-        Category.objects.new_category(category = "elderberries")
+        Category.objects.new_category(category = 'elderberries')
         Quiz.objects.create(id = 1,
-                            title = "test quiz 1",
-                            description = "d1",
-                            url = "tq1",)
+                            title = 'test quiz 1',
+                            description = 'd1',
+                            url = 'tq1',)
         Quiz.objects.create(id = 2,
-                            title = "test quiz 2",
-                            description = "d2",
-                            url = "t q2",)
+                            title = 'test quiz 2',
+                            description = 'd2',
+                            url = 't q2',)
         Quiz.objects.create(id = 3,
-                            title = "test quiz 3",
-                            description = "d3",
-                            url = "t   q3",)
+                            title = 'test quiz 3',
+                            description = 'd3',
+                            url = 't   q3',)
         Quiz.objects.create(id = 4,
-                            title = "test quiz 4",
-                            description = "d4",
-                            url = "t-!£$%^&*q4",)
+                            title = 'test quiz 4',
+                            description = 'd4',
+                            url = 't-!£$%^&*q4',)
 
 
     def test_quiz_url(self):
@@ -57,18 +58,18 @@ class TestQuiz(TestCase):
         q3 = Quiz.objects.get(id = 3)
         q4 = Quiz.objects.get(id = 4)
 
-        self.assertEqual(q1.url, "tq1")
-        self.assertEqual(q2.url, "t-q2")
-        self.assertEqual(q3.url, "t-q3")
-        self.assertEqual(q4.url, "t-q4")
+        self.assertEqual(q1.url, 'tq1')
+        self.assertEqual(q2.url, 't-q2')
+        self.assertEqual(q3.url, 't-q3')
+        self.assertEqual(q4.url, 't-q4')
 
     def test_quiz_options(self):
         c1 = Category.objects.get(id = 1)
 
         q5 = Quiz.objects.create(id = 5,
-                                 title = "test quiz 5",
-                                 description = "d5",
-                                 url = "tq5",
+                                 title = 'test quiz 5',
+                                 description = 'd5',
+                                 url = 'tq5',
                                  category = c1,
                                  exam_paper = True,)
 
@@ -80,21 +81,21 @@ class TestQuiz(TestCase):
 
 class TestProgress(TestCase):
     def setUp(self):
-        Category.objects.new_category(category = "elderberries")
+        Category.objects.new_category(category = 'elderberries')
 
         Quiz.objects.create(id = 1,
-                            title = "test quiz 1",
-                            description = "d1",
-                            url = "tq1",)
+                            title = 'test quiz 1',
+                            description = 'd1',
+                            url = 'tq1',)
 
-        self.user = User.objects.create_user(username = "jacob",
-                                             email = "jacob@jacob.com",
-                                             password = "top_secret")
+        self.user = User.objects.create_user(username = 'jacob',
+                                             email = 'jacob@jacob.com',
+                                             password = 'top_secret')
 
 
     def test_list_all_empty(self):
         p1 = Progress.objects.new_progress(self.user)
-        self.assertEqual(p1.score, "")
+        self.assertEqual(p1.score, '')
 
         category_dict = p1.list_all_cat_scores()
 
@@ -102,69 +103,69 @@ class TestProgress(TestCase):
 
         category_dict = p1.list_all_cat_scores()
 
-        self.assertIn("elderberries", p1.score)
+        self.assertIn('elderberries', p1.score)
 
-        Category.objects.new_category(category = "cheese")
+        Category.objects.new_category(category = 'cheese')
 
         category_dict = p1.list_all_cat_scores()
 
-        self.assertIn("cheese", p1.score)
+        self.assertIn('cheese', p1.score)
 
     def test_check_cat(self):
         p1 = Progress.objects.new_progress(self.user)
-        elderberry_score = p1.check_cat_score("elderberries")
+        elderberry_score = p1.check_cat_score('elderberries')
 
         self.assertEqual(elderberry_score, (0, 0))
 
-        fake_score = p1.check_cat_score("monkey")
+        fake_score = p1.check_cat_score('monkey')
 
-        self.assertEqual(fake_score, ("error", "category does not exist"))
+        self.assertEqual(fake_score, ('error', 'category does not exist'))
 
-        Category.objects.new_category(category = "cheese")
-        cheese_score = p1.check_cat_score("cheese")
+        Category.objects.new_category(category = 'cheese')
+        cheese_score = p1.check_cat_score('cheese')
 
         self.assertEqual(cheese_score, (0, 0))
-        self.assertIn("cheese", p1.score)
+        self.assertIn('cheese', p1.score)
 
     def test_update_score(self):
         p1 = Progress.objects.new_progress(self.user)
         p1.list_all_cat_scores()
-        p1.update_score("elderberries", 1, 2)
-        elderberry_score = p1.check_cat_score("elderberries")
+        p1.update_score('elderberries', 1, 2)
+        elderberry_score = p1.check_cat_score('elderberries')
 
         self.assertEqual(elderberry_score, (1, 2))
 
-        Category.objects.new_category(category = "cheese")
-        p1.update_score("cheese", 3, 4)
-        cheese_score = p1.check_cat_score("cheese")
+        Category.objects.new_category(category = 'cheese')
+        p1.update_score('cheese', 3, 4)
+        cheese_score = p1.check_cat_score('cheese')
 
         self.assertEqual(cheese_score, (3, 4))
 
-        fake_cat = p1.update_score("hamster", 3, 4)
+        fake_cat = p1.update_score('hamster', 3, 4)
         self.assertIn('error', str(fake_cat))
 
-        non_int = p1.update_score("hamster", "1", "a")
+        non_int = p1.update_score('hamster', '1', 'a')
         self.assertIn('error', str(non_int))
 
 
 class TestSitting(TestCase):
     def setUp(self):
         quiz1 = Quiz.objects.create(id = 1,
-                                 title = "test quiz 1",
-                                 description = "d1",
-                                 url = "tq1",)
+                                 title = 'test quiz 1',
+                                 description = 'd1',
+                                 url = 'tq1',)
 
         question1 = MCQuestion.objects.create(id = 1,
-                                              content = "squawk",)
+                                              content = 'squawk',)
         question1.quiz.add(quiz1)
 
         question2 = MCQuestion.objects.create(id = 2,
-                                              content = "squeek",)
+                                              content = 'squeek',)
         question2.quiz.add(quiz1)
 
-        self.user = User.objects.create_user(username = "jacob",
-                                             email = "jacob@jacob.com",
-                                             password = "top_secret")
+        self.user = User.objects.create_user(username = 'jacob',
+                                             email = 'jacob@jacob.com',
+                                             password = 'top_secret')
 
         Sitting.objects.new_sitting(self.user, quiz1)
 
@@ -203,45 +204,45 @@ class TestSitting(TestCase):
 
         question1 = MCQuestion.objects.get(id = 1)
         s1.add_incorrect_question(question1)
-        self.assertIn("1", s1.get_incorrect_questions())
+        self.assertIn('1', s1.get_incorrect_questions())
 
         question3 = TF_Question.objects.create(id = 3,
-                                               content = "oink",)
+                                               content = 'oink',)
         s1.add_incorrect_question(question3)
-        self.assertIn("3", s1.get_incorrect_questions())
+        self.assertIn('3', s1.get_incorrect_questions())
 
         quiz = Quiz.objects.get(id = 1)
         f_test = s1.add_incorrect_question(quiz)
         self.assertEqual(f_test, False)
-        self.assertNotIn("test", s1.get_incorrect_questions())
+        self.assertNotIn('test', s1.get_incorrect_questions())
 
         self.assertEqual(s1.complete, False)
         s1.mark_quiz_complete()
         self.assertEqual(s1.complete, True)
 
-"""
+'''
 Tests relating to views
-"""
+'''
 
 class TestNonQuestionViews(TestCase):
-    """
+    '''
     Starting on questions not directly involved with questions.
-    """
+    '''
     def setUp(self):
-        Category.objects.new_category(category = "elderberries")
+        Category.objects.new_category(category = 'elderberries')
         c1 = Category.objects.get(id = 1)
-        Category.objects.new_category(category = "straw.berries")
-        Category.objects.new_category(category = "black berries")
+        Category.objects.new_category(category = 'straw.berries')
+        Category.objects.new_category(category = 'black berries')
 
         Quiz.objects.create(id = 1,
-                            title = "test quiz 1",
-                            description = "d1",
-                            url = "tq1",
+                            title = 'test quiz 1',
+                            description = 'd1',
+                            url = 'tq1',
                             category = c1)
         Quiz.objects.create(id = 2,
-                            title = "test quiz 2",
-                            description = "d2",
-                            url = "t q2",)
+                            title = 'test quiz 2',
+                            description = 'd2',
+                            url = 't q2',)
 
 
     def test_index(self):
@@ -267,56 +268,56 @@ class TestNonQuestionViews(TestCase):
         self.assertContains(response, 'Sign up')
 
         session = self.client.session
-        session["session_score"] = 1
-        session["session_score_possible"] = 2
+        session['session_score'] = 1
+        session['session_score_possible'] = 2
         session.save()
 
         response = self.client.get('/q/progress/')
         self.assertContains(response, '1 out of 2')
 
     def test_progress_user(self):
-        self.user = User.objects.create_user(username = "jacob",
-                                             email = "jacob@jacob.com",
-                                             password = "top_secret")
+        self.user = User.objects.create_user(username = 'jacob',
+                                             email = 'jacob@jacob.com',
+                                             password = 'top_secret')
 
 
         self.client.login(username='jacob', password='top_secret')
         p1 = Progress.objects.new_progress(self.user)
-        p1.update_score("elderberries", 1, 2)
+        p1.update_score('elderberries', 1, 2)
 
         response = self.client.get('/q/progress/')
 
-        self.assertContains(response, "elderberries")
+        self.assertContains(response, 'elderberries')
 
 
 class TestQuestionViewsAnon(TestCase):
 
     def setUp(self):
-        Category.objects.new_category(category = "elderberries")
+        Category.objects.new_category(category = 'elderberries')
         c1 = Category.objects.get(id = 1)
 
         quiz1 = Quiz.objects.create(id = 1,
-                                    title = "test quiz 1",
-                                    description = "d1",
-                                    url = "tq1",
+                                    title = 'test quiz 1',
+                                    description = 'd1',
+                                    url = 'tq1',
                                     category = c1)
 
         question1 = MCQuestion.objects.create(id = 1,
-                                              content = "squawk",)
+                                              content = 'squawk',)
         question1.quiz.add(quiz1)
 
         question2 = MCQuestion.objects.create(id = 2,
-                                              content = "squeek",)
+                                              content = 'squeek',)
         question2.quiz.add(quiz1)
 
         Answer.objects.create(id = 123,
                               question = question1,
-                              content = "bing",
+                              content = 'bing',
                               correct = False,)
 
         Answer.objects.create(id = 456,
                               question = question2,
-                              content = "bong",
+                              content = 'bong',
                               correct = True,)
 
     def test_quiz_take_anon_view_only(self):
@@ -334,8 +335,8 @@ class TestQuestionViewsAnon(TestCase):
         self.assertEqual(self.client.session['1_score'], 0)
         self.assertEqual(self.client.session['page_count'], 0)
         self.assertEqual(response.context['quiz'].id, 1)
-        self.assertEqual(response.context['question'].content, "squawk")
-        self.assertEqual(response.context['question_type'], "MCQuestion")
+        self.assertEqual(response.context['question'].content, 'squawk')
+        self.assertEqual(response.context['question_type'], 'MCQuestion')
         self.assertEqual(response.context['previous'], {})
         self.assertEqual(response.context['show_advert'], False)
         self.assertTemplateUsed('question.html')
@@ -413,49 +414,49 @@ class TestQuestionViewsAnon(TestCase):
 class TestQuestionViewsUser(TestCase):
 
     def setUp(self):
-        Category.objects.new_category(category = "elderberries")
+        Category.objects.new_category(category = 'elderberries')
         c1 = Category.objects.get(id = 1)
 
         quiz1 = Quiz.objects.create(id = 1,
-                                    title = "test quiz 1",
-                                    description = "d1",
-                                    url = "tq1",
+                                    title = 'test quiz 1',
+                                    description = 'd1',
+                                    url = 'tq1',
                                     category = c1)
 
         quiz2 = Quiz.objects.create(id = 2,
-                                    title = "test quiz 2",
-                                    description = "d2",
-                                    url = "tq2",
+                                    title = 'test quiz 2',
+                                    description = 'd2',
+                                    url = 'tq2',
                                     category = c1,
                                     answers_at_end = True,
                                     exam_paper = True)
 
-        self.user = User.objects.create_user(username = "jacob",
-                                             email = "jacob@jacob.com",
-                                             password = "top_secret")
+        self.user = User.objects.create_user(username = 'jacob',
+                                             email = 'jacob@jacob.com',
+                                             password = 'top_secret')
 
         question1 = MCQuestion.objects.create(id = 1,
-                                              content = "squawk")
+                                              content = 'squawk')
         question1.quiz.add(quiz1)
         question1.quiz.add(quiz2)
 
         question2 = MCQuestion.objects.create(id = 2,
-                                              content = "squeek")
+                                              content = 'squeek')
         question2.quiz.add(quiz1)
 
         question3 = TF_Question.objects.create(id = 3,
-                                               content = "oink",
+                                               content = 'oink',
                                                correct = True)
         question3.quiz.add(quiz2)
 
         Answer.objects.create(id = 123,
                               question = question1,
-                              content = "bing",
+                              content = 'bing',
                               correct = False,)
 
         Answer.objects.create(id = 456,
                               question = question2,
-                              content = "bong",
+                              content = 'bong',
                               correct = True,)
 
     def test_quiz_take_user_view_only(self):
@@ -474,8 +475,8 @@ class TestQuestionViewsUser(TestCase):
         self.assertEqual(sitting.current_score, 0)
         self.assertEqual(self.client.session['page_count'], 0)
         self.assertEqual(response.context['quiz'].id, 1)
-        self.assertEqual(response.context['question'].content, "squawk")
-        self.assertEqual(response.context['question_type'], "MCQuestion")
+        self.assertEqual(response.context['question'].content, 'squawk')
+        self.assertEqual(response.context['question_type'], 'MCQuestion')
         self.assertEqual(response.context['previous'], {})
         self.assertEqual(response.context['show_advert'], False)
         self.assertTemplateUsed('question.html')
@@ -524,7 +525,7 @@ class TestQuestionViewsUser(TestCase):
         self.assertEqual(sitting.question_list, '2,')
         self.assertEqual(self.client.session['page_count'], 1)
         self.assertIn('123', response.context['previous']['previous_answer'])
-        self.assertEqual(response.context['question'].content, "squeek")
+        self.assertEqual(response.context['question'].content, 'squeek')
         self.assertTemplateUsed('question.html')
 
         response = self.client.get('/q/tq1/',
@@ -556,7 +557,7 @@ class TestQuestionViewsUser(TestCase):
         self.assertIn(question1, response.context['questions'])
         self.assertIn(question2, response.context['questions'])
         self.assertContains(response, 'correctly')
-        self.assertContains(response, 'incorrectly')
+        self.assertNotContains(response, 'incorrectly')
         self.assertContains(response, 'True')
 
 
@@ -568,3 +569,61 @@ class TestQuestionViewsUser(TestCase):
         self.assertEqual(Sitting.objects.count(), 1)
         # test that exam result can be recalled later
         self.assertIn(sitting, progress.show_exams())
+
+class TestTemplateTags(TestCase):
+
+    def setUp(self):
+        self.question1 = MCQuestion.objects.create(id = 1,
+                                                   content = 'squawk')
+
+        self.answer1 = Answer.objects.create(id = 123,
+                                             question = self.question1,
+                                             content = 'bing',
+                                             correct = False,)
+
+        self.answer2 = Answer.objects.create(id = 456,
+                                             question = self.question1,
+                                             content = 'bong',
+                                             correct = True,)
+
+        self.question2 = TF_Question.objects.create(id = 3,
+                                                    content = 'oink',
+                                                    correct = True)
+
+    def test_answers_mc(self):
+        template = Template( '{% load quiz_tags %}' +
+                             '{% answers_for_mc_question question %}')
+        context = Context({'question': self.question1})
+
+        self.assertTemplateUsed('answers_for_mc_question.html')
+        self.assertIn('bing', template.render(context))
+
+    def test_correct_answer_MC(self):
+        template = Template( '{% load quiz_tags %}' +
+                             '{% correct_answer previous %}')
+
+        previous_MC = {'previous_answer': 123,
+                       'previous_outcome': 'incorrect',
+                       'previous_question': self.question1}
+
+        context = Context({'previous': previous_MC})
+
+        self.assertTemplateUsed('correct_answer.html')
+        self.assertIn('bing', template.render(context))
+        self.assertIn('bong', template.render(context))
+        self.assertIn('your answer', template.render(context))
+
+    def test_correct_answer_TF(self):
+        template = Template( '{% load quiz_tags %}' +
+                             '{% correct_answer previous %}')
+
+        previous_TF = {'previous_answer': 'T',
+                       'previous_outcome': 'correct',
+                       'previous_question': self.question2}
+
+        context = Context({'previous': previous_TF})
+
+        self.assertTemplateUsed('correct_answer.html')
+        self.assertIn('True', template.render(context))
+        self.assertIn('False', template.render(context))
+        self.assertNotIn('your answer', template.render(context))