Exemplo n.º 1
0
    def first_page(self):
        """
        Gets the first page a user id needs to start on. If they haven't answered any questions or up to
        20 questions, that's page 1. If they've answered 21-40 questions, that's page 2, and so on.
        """
        quiz_attempt = QuizAttempt.get_by_user_id(self.user_id, self.quiz_type)

        return (len(quiz_attempt.questions) / QUESTIONS_PER_PAGE) + 1
Exemplo n.º 2
0
    def get(self, **context):
        """ GET """
        user = User.get_or_create_by_user_id(self.request.GET.get('userId'))
        attempt = QuizAttempt.get_by_user_id(user.user_id, context['quiz_type'])
        if not attempt:
            # Start up a new QuizAttempt!
            attempt = QuizAttempt.create(user_id=user.user_id, quiz_type=context['quiz_type'])
        if settings.is_devappserver():
            user.paid = True
        context.update({
            'user': user,
            'user_id': user.user_id,
            'quiz_attempt': attempt
        })

        logging.info(context)
        self.render_response('survey.html', **context)
Exemplo n.º 3
0
    def save_user_submitted_answers(self, submitted):
        """
        Save answers submitted to the API.
        :param submitted:
        """
        quiz_attempt = QuizAttempt.get_by_user_id(self.user_id, self.quiz_type)

        if type(submitted) == list and len(submitted) > 0:
            questions_start = submitted[0].question_number - 1
            questions_end = submitted[-1].question_number
        else:
            return

        page_num = (questions_start / QUESTIONS_PER_PAGE) + 1
        submitted = self._normalize_question_numbers(submitted, page_num, out=False)

        for question in quiz_attempt.questions[questions_start:questions_end]:
            if question.question_number == submitted[0].question_number:
                quiz_attempt.questions[question.question_number - 1].answer = submitted.pop(0).answer

        quiz_attempt.questions.extend(submitted)
        quiz_attempt.put()
Exemplo n.º 4
0
 def test_get_by_user_id_raises_ValueError_if_quiz_type_not_in_allowed_list(self):
     with self.assertRaises(ValueError):
         QuizAttempt.get_by_user_id(1, 'not_real')
Exemplo n.º 5
0
 def test_get_by_user_id_returns_attempt_when_long_is_passed_in(self):
     self.assertIsNotNone(QuizAttempt.get_by_user_id(87752083))
Exemplo n.º 6
0
 def test_get_by_user_id_coerces_to_int_if_string_passed_in(self):
     with self.assertRaises(TypeError):
         QuizAttempt.get_by_user_id([1])  # Raises a TypeError when it goes to convert a list to an int.
Exemplo n.º 7
0
 def test_get_by_user_id_returns_None_when_no_attempts_exist(self):
     self.assertIsNone(QuizAttempt.get_by_user_id(100))
Exemplo n.º 8
0
 def test_get_by_user_id_returns_short_a_quiz_type_if_param_is_passed(self):
     QuizAttempt.create(1, quiz_type='short_a')
     self.assertEqual('short_a', QuizAttempt.get_by_user_id(1, quiz_type='short_a').quiz_type)
Exemplo n.º 9
0
 def test_get_by_user_id_returns_fullform_quiz_type_by_default(self):
     self.assertEqual('fullform', QuizAttempt.get_by_user_id(1).quiz_type)
Exemplo n.º 10
0
 def test_get_by_user_id_returns_attempt_for_user_that_has_an_attempt(self):
     self.assertIsNotNone(QuizAttempt.get_by_user_id(1))
Exemplo n.º 11
0
 def test_get_by_user_id_raises_value_error_if_None_passed_in(self):
     with self.assertRaises(ValueError):
         QuizAttempt.get_by_user_id(None)