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'])
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)
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)
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)
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)
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)
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'])
def get(self, request, format=None): quizzes = Quiz.objects.all() serializer = QuizSerializer(quizzes, many=True) return Response(serializer.data)
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)
def get(self, request, pk, format=None): quiz = self.get_quiz(pk, request.user) serializer = QuizSerializer(quiz) return Response(serializer.data)
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)
def get(self, request, format=None): quizzes = Quiz.objects.filter(creator=request.user) serializer = QuizSerializer(quizzes, many=True) return Response(serializer.data)