def test_update_person_failed(self): self.mock_api_client(200) self.mock_node_edit(500) self.mock_node_retrieval('uuid', self.uuid, status=200) people = MarketingSitePeople() with self.assertRaises(PersonToMarketingException): people.update_person(self.person)
def test_update_person_json(self, mock_update_node): self.mock_api_client(200) self.mock_node_retrieval('uuid', self.uuid, status=200) people = MarketingSitePeople() people.update_person(self.person) self.assertEqual(mock_update_node.call_count, 1) data = mock_update_node.call_args[0][2] self.assertDictEqual(data, self.expected_data)
def test_update_uuid_not_found(self): self.mock_api_client(200) people = MarketingSitePeople() with LogCapture(LOGGER_NAME) as log: people.update_person(self.person) log.check( (LOGGER_NAME, 'INFO', 'Person with UUID [{}] does not exist on the marketing site'. format(self.uuid)))
def test_update_person(self): self.mock_api_client(200) self.mock_node_edit(200) self.mock_node_retrieval('uuid', self.uuid, status=200) people = MarketingSitePeople() data = people.update_person(self.person) self.assertEqual(data, {})
def update(self, request, *args, **kwargs): # pylint: disable=unused-argument """ Updates a person in discovery and the corresponding person node in drupal """ person_data = request.data partner = request.site.partner person_data['partner'] = partner.id partial = kwargs.pop('partial', False) instance = self.get_object() serializer = self.get_serializer(instance, data=person_data, partial=partial) serializer.is_valid(raise_exception=True) if not waffle.switch_is_active('publish_person_to_marketing_site'): return Response('publish_person_to_marketing_site is disabled.', status=status.HTTP_400_BAD_REQUEST) try: marketing_person = MarketingSitePeople() marketing_person.update_person(partner, serializer.validated_data['uuid'], self._get_person_data(serializer)) except (PersonToMarketingException, MarketingSiteAPIClientException): logger.exception( 'An error occurred while updating the person [%s]-[%s] on the marketing site.', serializer.validated_data['given_name'], serializer.validated_data['family_name']) return Response( 'Failed to update person data on the marketing site.', status=status.HTTP_400_BAD_REQUEST) try: self.perform_update(serializer) except Exception: # pylint: disable=broad-except logger.exception( 'An error occurred while updating the person [%s]-[%s] in discovery.', serializer.validated_data['given_name'], serializer.validated_data['family_name']) return Response('Failed to update person data.', status=status.HTTP_400_BAD_REQUEST) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_200_OK, headers=headers)