Esempio n. 1
0
 def put(self, request, pk, format=None):
     quiz = self.get_quiz(pk, request.user)
     serializer = QuizSerializer(quiz, data=request.data)
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 def test_deserializer_json_to_object(self):
     deserialized_data = QuizSerializer(data=full_quiz_dict)
     deserialized_data.is_valid()
     obj = deserialized_data.save()
     self.assertEqual(obj.name, full_quiz_dict['name'])
     self.assertEqual(obj.topics.all()[
                      0].topic_name, self.topic_dict['topic_name'])
Esempio n. 3
0
 def test_get_quiz(self):
     # Given
     quiz = Quiz.objects.get(description='Quiz1')
     serializer = QuizSerializer(quiz)
     # When
     self.client.login(username=self.username, password=self.password)
     response = self.client.get(reverse('api:quiz', kwargs={'pk': quiz.id}))
     # Then
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(response.data, serializer.data)
Esempio n. 4
0
 def test_get_all_quizzes(self):
     # Given
     quizzes = Quiz.objects.filter(creator=self.user)
     serializer = QuizSerializer(quizzes, many=True)
     # When
     self.client.login(username=self.username, password=self.password)
     response = self.client.get(reverse('api:quizzes'))
     # Then
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), 2)
     self.assertEqual(response.data, serializer.data)
Esempio n. 5
0
 def get(self, request, format=None):
     if not 'token' in request.GET:
         return Response(status=status.HTTP_404_NOT_FOUND)
     student = get_student(request.GET['token'])
     quiz = Quiz(subject='fractions')
     quiz.save()
     scores = Score.objects.all().filter(subject='fractions',
                                         student=student)
     avg = 0
     if len(scores) > 2:
         for score in scores:
             avg = avg + score.value
         avg = avg / len(scores)
     if avg <= num_questions / 3.0:
         low_mult = 2
         high_mult = 3
         low_num = 1
         high_num = 3
         high_denom = 6
     elif avg <= (2 * num_questions) / 3.0:
         low_mult = 3
         high_mult = 5
         low_num = 1
         high_num = 4
         high_denom = 8
     else:
         low_mult = 6
         high_mult = 9
         low_num = 1
         high_num = 5
         high_denom = 10
     for i in range(num_questions):
         multiplier = random.randint(low_mult, high_mult)
         numerator = random.randint(low_num, high_num)
         denom = random.randint(numerator + 1, high_denom)
         ans_denom = denom * multiplier
         answer = numerator * multiplier
         text = str(numerator) + ' ' + str(denom) + ' ' + str(ans_denom)
         explanation = 'The correct answer is ' + str(
             answer) + ' because ' + str(numerator) + '/' + str(
                 denom) + ' times ' + str(multiplier) + '/' + str(
                     multiplier) + ' is ' + str(answer) + '/' + str(
                         ans_denom)
         question = Question(text=text,
                             answer=str(answer),
                             explanation=explanation,
                             quiz=quiz)
         question.save()
         quiz.save()
     serializer = QuizSerializer(quiz)
     return Response(serializer.data)
Esempio n. 6
0
def quiz_list(request):
    """
    List all quizzes (with the number of questions per quiz)
    Optional query parameters:
    - 'author' (string)
    - 'full' (string)
    """
    quizzes = Quiz.objects.published()
    if request.GET.get("author"):
        quizzes = quizzes.for_author(request.GET.get("author"))

    if request.GET.get("full"):
        serializer = QuizFullSerializer(quizzes, many=True)
    else:
        serializer = QuizSerializer(quizzes, many=True)

    return Response(serializer.data)
Esempio n. 7
0
 def get(self, request, format=None):
     if not 'token' in request.GET:
         return Response(status=status.HTTP_404_NOT_FOUND)
     student = get_student(request.GET['token'])
     quiz = Quiz(subject='subtraction')
     quiz.save()
     scores = Score.objects.all().filter(subject='subtraction',
                                         student=student)
     avg = 0
     if len(scores) > 2:
         for score in scores:
             avg = avg + score.value
         avg = avg / len(scores)
     if avg <= num_questions / 3.0:
         low_x = 3
         low_y = 1
         high = 9
     elif avg <= (2 * num_questions) / 3.0:
         low_x = 5
         low_y = 3
         high = 20
     else:
         low_x = 15
         low_y = 11
         high = 99
     for i in range(num_questions):
         x = random.randint(low_x, high)
         y = random.randint(low_y, x - 1)
         answer = x - y
         text = str(x) + ' ' + str(y)
         explanation = str(x) + ' - ' + str(y) + ' is equal to ' + str(
             answer)
         question = Question(text=text,
                             answer=str(answer),
                             explanation=explanation,
                             quiz=quiz)
         question.save()
         quiz.save()
     serializer = QuizSerializer(quiz)
     return Response(serializer.data)
Esempio n. 8
0
 def get(self, request, format=None):
     if not 'token' in request.GET:
         return Response(status=status.HTTP_404_NOT_FOUND)
     student = get_student(request.GET['token'])
     quiz = Quiz(subject='division')
     quiz.save()
     scores = Score.objects.all().filter(subject='division',
                                         student=student)
     avg = 0
     if len(scores) > 2:
         for score in scores:
             avg = avg + score.value
         avg = avg / len(scores)
     if avg <= num_questions / 3.0:
         low = 1
         high = 4
     elif avg <= (2 * num_questions) / 3.0:
         low = 3
         high = 7
     else:
         low = 6
         high = 12
     for i in range(num_questions):
         y = random.randint(low, high)
         answer = random.randint(low, high)
         x = y * answer
         text = str(x) + ' ' + str(y)
         explanation = str(x) + ' divided by ' + str(
             y) + ' is equal to ' + str(answer)
         question = Question(text=text,
                             answer=str(answer),
                             explanation=explanation,
                             quiz=quiz)
         question.save()
         quiz.save()
     serializer = QuizSerializer(quiz)
     return Response(serializer.data)
 def test_serializer_object_to_json(self):
     serialized_data = QuizSerializer(self.category_obj)
     full_json = serialized_data.data
     self.assertEqual(self.category_obj.name, full_json['name'])
     self.assertEqual(self.topic_obj.topic_name,
                      full_json['topics'][0]['topic_name'])
Esempio n. 10
0
 def get(self, request, format=None):
     quizzes = Quiz.objects.all()
     serializer = QuizSerializer(quizzes, many=True)
     return Response(serializer.data)
Esempio n. 11
0
 def get(self, request, format=None):
     if not 'token' in request.GET:
         return Response(status=status.HTTP_404_NOT_FOUND)
     student = get_student(request.GET['token'])
     quiz = Quiz(subject='geometry')
     quiz.save()
     scores = Score.objects.all().filter(subject='geometry',
                                         student=student)
     avg = 0
     for i in range(num_questions):
         area = random.choice(['Area', 'Perimeter'])
         if len(scores) > 2:
             for score in scores:
                 avg = avg + score.value
             avg = avg / len(scores)
         if avg <= num_questions / 3.0:
             shape = 'Square'
             low = 2
             high = 5
         elif avg <= (2 * num_questions) / 3.0:
             shape = random.choice(['Square', 'Rectangle'])
             low = 3
             high = 9
         else:
             shape = random.choice(['Square', 'Rectangle', 'Triangle'])
             low = 6
             high = 20
         val = ''
         if shape == 'Square':
             x = random.randint(low, high)
             if area == 'Area':
                 answer = x * x
             elif area == 'Perimeter':
                 answer = 4 * x
             val = str(x)
         elif shape == 'Rectangle':
             x = random.randint(low, high)
             y = random.randint(low, high)
             while y == x:
                 y == random.randint(low, high)
             if area == 'Area':
                 answer = x * y
             elif area == 'Perimeter':
                 answer = 2 * (x + y)
             if y > x:
                 val = str(x) + ' ' + str(y)
             else:
                 val = str(y) + ' ' + str(x)
         elif shape == 'Triangle':
             x = random.randint(low, high)
             if x % 2 == 1:
                 if not x == high:
                     x = x + 1
                 else:
                     x = x - 1
             y = random.randint(low, high)
             while y == x:
                 y == random.randint(low, high)
             if area == 'Area':
                 answer = (x * y) / 2
                 if y > x:
                     val = str(x) + ' ' + str(y)
                 else:
                     val = str(y) + ' ' + str(x)
             elif area == 'Perimeter':
                 pythag = random.choice([[3, 4, 5], [5, 12, 13],
                                         [8, 15, 17], [7, 24, 25],
                                         [9, 40, 41], [11, 60, 61],
                                         [12, 35, 37], [16, 63, 65],
                                         [20, 21, 29]])
                 answer = pythag[0] + pythag[1] + pythag[2]
                 val = str(pythag[0]) + ' ' + str(pythag[1]) + ' ' + str(
                     pythag[2])
         text = shape + ' ' + area + ' ' + val
         explanation = 'blank on purpose'
         question = Question(text=text,
                             answer=str(answer),
                             explanation=explanation,
                             quiz=quiz)
         question.save()
         quiz.save()
     serializer = QuizSerializer(quiz)
     return Response(serializer.data)
Esempio n. 12
0
 def get(self, request, pk, format=None):
     quiz = self.get_quiz(pk, request.user)
     serializer = QuizSerializer(quiz)
     return Response(serializer.data)
Esempio n. 13
0
 def post(self, request, format=None):
     serializer = QuizSerializer(data=request.data)
     if serializer.is_valid():
         serializer.save()
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Esempio n. 14
0
 def get(self, request, format=None):
     quizzes = Quiz.objects.filter(creator=request.user)
     serializer = QuizSerializer(quizzes, many=True)
     return Response(serializer.data)