From: tomwalker Date: Wed, 6 Aug 2014 14:49:05 +0000 (+0100) Subject: updated tests to work alongside pull request from Richard Mansfield X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=4e784dba5b916963c6b878aa4dfd94f3126083fa;p=django_quiz.git updated tests to work alongside pull request from Richard Mansfield --- diff --git a/.gitignore b/.gitignore index 364a537..31d02e5 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ build* /.coveragerc /coverage_html_report/ /htmlcov/ +/uploads/ \ No newline at end of file diff --git a/quiz/models.py b/quiz/models.py index 7549e50..d8914ba 100644 --- a/quiz/models.py +++ b/quiz/models.py @@ -79,8 +79,9 @@ class Quiz(models.Model): "are set?") max_questions = models.PositiveIntegerField(blank=True, null=True, - help_text="Number of questions to be " - "answered on each attempt") + help_text="Number of questions" + " to be answered on" + " each attempt.") answers_at_end = models.BooleanField(blank=False, default=False, @@ -466,7 +467,8 @@ class Sitting(models.Model): def get_questions(self): question_ids = self._question_ids() return sorted( - self.quiz.question_set.filter(id__in=question_ids).select_subclasses(), + self.quiz.question_set.filter(id__in=question_ids) + .select_subclasses(), key=lambda q: question_ids.index(q.id)) @property @@ -481,6 +483,7 @@ class Sitting(models.Model): def get_max_score(self): return len(self._question_ids()) + class Question(models.Model): """ Base class for all question types. diff --git a/quiz/templatetags/quiz_tags.py b/quiz/templatetags/quiz_tags.py index d1d6013..2ce044c 100644 --- a/quiz/templatetags/quiz_tags.py +++ b/quiz/templatetags/quiz_tags.py @@ -19,6 +19,7 @@ def correct_answer_for_all(context, question): return {'previous': {'answers': answers}, 'user_was_incorrect': user_was_incorrect} + @register.filter def answer_choice_to_string(question, answer): return question.answer_choice_to_string(answer) diff --git a/quiz/tests.py b/quiz/tests.py index 26908e5..29187dd 100644 --- a/quiz/tests.py +++ b/quiz/tests.py @@ -402,6 +402,11 @@ class TestQuestionMarking(TestCase): self.question1 = MCQuestion.objects.create(id=1, content='squawk') self.question1.quiz.add(self.quiz1) + self.answer1 = Answer.objects.create(id=123, + question=self.question1, + content='bing', + correct=False) + sitting1 = Sitting.objects.new_sitting(self.student, self.quiz1) sitting2 = Sitting.objects.new_sitting(self.student, self.quiz2) sitting1.complete = True @@ -483,10 +488,10 @@ class TestQuestionMarking(TestCase): self.assertContains(response, 'button') self.assertNotContains(response, 'Correct') - response = self.client.get('/marking/3/', {'id': 3}) + response = self.client.post('/marking/3/', {'qid': 3}) self.assertContains(response, 'Correct') - response = self.client.get('/marking/3/', {'id': 3}) + response = self.client.post('/marking/3/', {'qid': 3}) self.assertNotContains(response, 'Correct') diff --git a/quiz/views.py b/quiz/views.py index 290da4c..00c44d2 100644 --- a/quiz/views.py +++ b/quiz/views.py @@ -232,9 +232,12 @@ class QuizTake(FormView): self.request.session.set_expiry(259200) # expires after 3 days questions = self.quiz.get_questions() question_list = [question.id for question in questions] + if self.quiz.random_order is True: random.shuffle(question_list) - if self.quiz.max_questions and self.quiz.max_questions < len(question_list): + + if all(self.quiz.max_questions, + self.quiz.max_questions < len(question_list)): question_list = question_list[:self.quiz.max_questions] # session score for anon users @@ -245,8 +248,8 @@ class QuizTake(FormView): # session list of question order and incorrect questions self.request.session[self.quiz.anon_q_data()] = dict( - incorrect_questions = [], - order = question_list, + incorrect_questions=[], + order=question_list, ) return self.request.session[self.quiz.anon_q_list()] @@ -264,7 +267,9 @@ class QuizTake(FormView): anon_session_score(self.request.session, 1, 1) else: anon_session_score(self.request.session, 0, 1) - self.request.session[self.quiz.anon_q_data()]['incorrect_questions'].append(self.question.id) + self.request\ + .session[self.quiz.anon_q_data()]['incorrect_questions']\ + .append(self.question.id) self.previous = {} if self.quiz.answers_at_end is not True: @@ -299,10 +304,14 @@ class QuizTake(FormView): if self.quiz.answers_at_end: results['questions'] = sorted( - self.quiz.question_set.filter(id__in=q_order).select_subclasses(), - key=lambda q: q_order.index(q.id) - ) - results['incorrect_questions'] = self.request.session[self.quiz.anon_q_data()]['incorrect_questions'] + self.quiz.question_set.filter(id__in=q_order) + .select_subclasses(), + key=lambda q: q_order.index(q.id)) + + results['incorrect_questions'] = ( + self.request + .session[self.quiz.anon_q_data()]['incorrect_questions']) + else: results['previous'] = self.previous