def put(self, request, pk, format=None): question = self.get_question(pk, request.user) serializer = QuestionSerializer(question, 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_new_questions(self): P_ID = 1 url = '/api/submit/' + str(P_ID) + '/questions' data = [{ "number": "1a" }, { "number": "1b" }, { "number": "2ai" }, { "number": "2aii" }, { "number": "2b" }] response = self.client.post(url, data, format='json') # Test status code self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Test response data valid serializer = QuestionSerializer(data=response.data, many=True, context={'paper_id': P_ID}) self.assertTrue(serializer.is_valid(), msg=serializer.errors) # Test response data correct self.assertEqual(response.data[0]['number'], "1a") self.assertEqual(response.data[1]['number'], "1b") self.assertEqual(response.data[2]['number'], "2ai") self.assertEqual(response.data[3]['number'], "2aii") self.assertEqual(response.data[4]['number'], "2b")
def post(self, request, paper_id): serializer = QuestionSerializer(data=request.data, many=True, context={'paper_id': paper_id}) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED)
def create(self, request, *args, **kwargs): choices = request.data.get("choices") serializer = QuestionSerializer(data=request.data) if serializer.is_valid(): question = serializer.save() for choice in choices: Choice.objects.create(**choice, question=question) serializer = QuestionSerializer(instance=question) return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def question_create(request): """ Create a one question. """ user = request.user question = Question(author=user) if request.method == 'POST': serializer = QuestionSerializer(question, 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) else: return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def test_get_questions_correctly(self): P_COURSE = 'C141' P_YEAR = '2015' response = self.client.get('/api/' + P_COURSE + '/' + P_YEAR + '/questions') # Test GET response OK self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() # Test response data can be serialized serializer = QuestionSerializer(data=data, many=True) self.assertTrue(serializer.is_valid(), msg=str(serializer.errors)) # Test response data correct for i in range(0, 4): self.assertEquals(data[i]['id'], i) self.assertEquals(data[i]['number'], str(i))
def PostQuestion(request): """!@brief Function which is called when a user adds a question @details the function takes a question object as part of the request body, extracts the object and then creates a new entry in the question table. Since the topics is a many-to-many field, the topics need to be added one by one @return returns the feed output for the given user """ serializer = QuestionSerializer(data=request.data) if serializer.is_valid(): ques = serializer.validated_data user = ques['user'] question = Question(user=user, username=user.name, userdepartment=user.department, userbio=user.bio, userdegree=user.degree, userspecialization=user.specialization, question=ques['question'], description=ques['description']) question.save() for topic in ques['topics']: question.topics.add(topic) return Feed(user.id) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def question_update(request, pk=None): """ Update all fields of question """ try: question = Question.objects.get(pk=pk) except Question.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) # verifying user of this question user = request.user if question.author != user: return Response({'error': 'You do not have permission to update this question.'}) if request.method == 'PUT': serializer = QuestionSerializer(question, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def post(self, request, format=None): serializer = QuestionSerializer(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)