def test_post_200(self, data):
        self.mock_mailgun_response()

        request_data = self.request_template()
        merge(request_data, data)

        response = self.request_to_class_view(AnnotationRequestViewSet,
                                              'post',
                                              data=request_data)
        self.assertEqual(response.status_code, 201)
        self.assertIsNotNone(response)
    def test_url_standardized(self, data, expected_response_url):
        self.mock_mailgun_response()
        request_data = self.request_template()
        merge(request_data, data)

        response = self.request_to_class_view(AnnotationRequestViewSet,
                                              'post',
                                              data=request_data)
        self.assertEqual(response.status_code, 201, response.content.decode())
        self.assertIsNotNone(response)
        self.assertEqual(
            json.loads(response.content.decode())['data']['attributes']['url'],
            expected_response_url)
    def test_error_logged(self):
        data = {'data': {'attributes': {'url': 'http://www.xyz.pl'}}}

        self.mock_mailgun_response(400)

        request_data = self.request_template()
        merge(request_data, data)

        with self.assertLogs('pp.annotation', level='ERROR') as cm:
            response = self.request_to_class_view(AnnotationRequestViewSet,
                                                  'post',
                                                  data=request_data)
            self.assertEqual(response.status_code, 201)
            self.assertIsNotNone(response)
            self.assertEqual(len(cm.output), 1)
    def test_post_optional_string_attributes(self, data):
        self.mock_mailgun_response()
        request_data = self.request_template()
        merge(request_data, data)

        response = self.request_to_class_view(AnnotationRequestViewSet,
                                              'post',
                                              data=request_data)
        self.assertEqual(response.status_code, 201, response.content.decode())
        for send_attr, send_value in data['data']['attributes'].items():
            self.assertEqual(
                send_value,
                json.loads(
                    response.content.decode())['data']['attributes'].get(
                        send_attr, ''), response.content)