def test_setting_answer_on_question_by_the_same_user_second_time(self): question_list = Factory.question_list(num_questions=3, num_choices=4) question_list = Factory.answered_question_list(question_list, self.user) questions = question_list.questions.all() response = self.c.post( f'/api/v1/question_list/{question_list.id}/set_answers/', { 'answers': json.dumps([ { 'question': questions[0].id, 'choice': self._get_random_choice_id(questions[0]) }, { 'question': questions[1].id, 'choice': self._get_random_choice_id(questions[1]) }, { 'question': questions[2].id, 'choice': self._get_random_choice_id(questions[2]) }, ]) }) assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.data == ['the same user can`t answer on quiz twice']
def test_keeping_order(self): qlist = mixer.blend('questions.QuestionList') q1 = Factory.question(num_choices=2, question_list=qlist) q2 = Factory.question(num_choices=0, question_list=qlist) q3 = Factory.question(num_choices=3, question_list=qlist) q4 = Factory.question(num_choices=1, question_list=qlist) q5 = Factory.question(num_choices=2, question_list=qlist) qlist.set_question_order([q1.id, q5.id, q3.id, q4.id, q2.id]) assert list(qlist.get_questions()) == [q1, q5, q3]
def test_only_one_choice_was_selected(self): question = mixer.blend('questions.Question') choice1 = mixer.blend('questions.QuestionChoice', question=question) choice2 = mixer.blend('questions.QuestionChoice', question=question) Factory.answered_question_choice(choice1, num_answers=2) assert list(question.get_choices_percentage()) == [ { 'choice': choice1.id, 'percent': 100 }, { 'choice': choice2.id, 'percent': 0 }, ]
def _create_question_with_answers(self, answers): question = mixer.blend('questions.Question') choice1 = mixer.blend('questions.QuestionChoice', question=question) choice2 = mixer.blend('questions.QuestionChoice', question=question) choice3 = mixer.blend('questions.QuestionChoice', question=question) Factory.answered_question_choice(choice1, num_answers=answers[0]) Factory.answered_question_choice(choice2, num_answers=answers[1]) Factory.answered_question_choice(choice3, num_answers=answers[2]) return question, choice1, choice2, choice3
def test_setting_answers(self): question_list = Factory.question_list(num_questions=3, num_choices=4) questions = question_list.questions.all() choices = [ self._get_random_choice_id(question) for question in questions ] response = self.c.post( f'/api/v1/question_list/{question_list.id}/set_answers/', { 'answers': json.dumps([ { 'question': questions[0].id, 'choice': choices[0] }, { 'question': questions[1].id, 'choice': choices[1] }, { 'question': questions[2].id, 'choice': choices[2] }, ]) }) assert response.status_code == status.HTTP_200_OK assert Answer.objects.filter(user=self.user, question=questions[0], choice_id=choices[0]).exists() is True assert Answer.objects.filter(user=self.user, question=questions[1], choice_id=choices[1]).exists() is True assert Answer.objects.filter(user=self.user, question=questions[2], choice_id=choices[2]).exists() is True
def test_not_contains_question_with_single_choice(self): qlist = mixer.blend('questions.QuestionList') question = Factory.question(num_choices=1, question_list=qlist) assert question not in qlist.get_questions()
def test_given_user_not_answer_on_any_questions_in_list(self): question_list = Factory.question_list(num_questions=2, num_choices=2) assert question_list.has_passed_by(self.user) is False
def test_given_user_answered_questions_in_list(self): question_list = Factory.question_list(num_questions=2, num_choices=3) question_list = Factory.answered_question_list(question_list, self.user) assert question_list.has_passed_by(self.user) is True
def test_question_with_two_choices(self): question = Factory.question(num_choices=2) assert question in Question.objects.has_choices()
def test_question_with_single_choice(self): question = Factory.question(num_choices=1) assert question not in Question.objects.has_choices()
def setUpTestData(cls): cls.question_list = Factory.question_list(num_questions=3, num_choices=4) cls.questions = cls.question_list.questions.all()