Exemple #1
0
    def test_domain_name_does_not_exists_is_logged(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        connection_error = 'Connection aborted. nodename nor servname provided, not known'
        mock_requests.post.side_effect = ConnectionError(connection_error)

        send_bulk_sms(sent_message_obj)

        self.assertTrue(
            mock_requests.post.called_once_with(
                API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("ConnectionError: %s" % connection_error,
                         retrieved_sms[0].log)
Exemple #2
0
    def test_rapid_pro_api_server_down_is_logged(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        network_error = 'rapid-pro server not responding in time'
        mock_requests.post.side_effect = ConnectTimeout(network_error)

        send_bulk_sms(sent_message_obj)

        self.assertTrue(
            mock_requests.post.called_once_with(
                API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("ConnectTimeout: %s" % network_error,
                         retrieved_sms[0].log)
    def test_should_get_rapid_pro_message(self):
        SentMessage(**self.bulk_sms_to_post).save()

        response = self.client.get(self.BULK_SMS_ENDPOINT, format='json')

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.data))
        self.assertDictContainsSubset(self.bulk_sms_to_post, response.data[0])
Exemple #4
0
    def test_invalid_token(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        some_id = 1234
        request_post = MagicMock()
        request_post.status_code = 403
        request_post.json.return_value = {u'detail': u'Invalid token'}
        mock_requests.post.return_value = request_post

        send_bulk_sms(sent_message_obj)

        self.assertTrue(
            mock_requests.post.called_once_with(
                API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("403: {u'detail': u'Invalid token'}",
                         retrieved_sms[0].log)
Exemple #5
0
    def test_non_201_responses_are_logged(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        some_id = 1234
        request_post = MagicMock()
        request_post.status_code = 400
        request_post.json.return_value = {"text": "This field is required."}
        mock_requests.post.return_value = request_post

        send_bulk_sms(sent_message_obj)

        self.assertTrue(
            mock_requests.post.called_once_with(
                API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("400: {'text': 'This field is required.'}",
                         retrieved_sms[0].log)
class SentMessageListCreateView(ListCreateAPIView):
    model = SentMessage
    serializer_class = SentMessageSerializer
    queryset = SentMessage.objects()
    permission_classes = [
        Or(build_permission_class('dms.can_manage_messages'), IsGetRequest)
    ]

    def post_save(self, obj, created=True):
        send_bulk_sms.delay(obj)
Exemple #7
0
    def test_should_send_message(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        some_id = 1234
        success_log = '201: rapid_pro_id = 1234'
        request_post = MagicMock()
        request_post.status_code = 201
        request_post.json.return_value = {
            "messages": [some_id],
            "sms": [some_id]
        }
        mock_requests.post.return_value = request_post

        send_bulk_sms(sent_message_obj)

        self.assertTrue(
            mock_requests.post.called_once_with(
                API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual(success_log, retrieved_sms[0].log)
Exemple #8
0
    def test_domain_name_does_not_exists_is_logged(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        connection_error = 'Connection aborted. nodename nor servname provided, not known'
        mock_requests.post.side_effect = ConnectionError(connection_error)

        send_bulk_sms(sent_message_obj)

        self.assertTrue(mock_requests.post.called_once_with(API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("ConnectionError: %s" % connection_error, retrieved_sms[0].log)
Exemple #9
0
    def test_rapid_pro_api_server_down_is_logged(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        network_error = 'rapid-pro server not responding in time'
        mock_requests.post.side_effect = ConnectTimeout(network_error)

        send_bulk_sms(sent_message_obj)

        self.assertTrue(mock_requests.post.called_once_with(API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("ConnectTimeout: %s" % network_error, retrieved_sms[0].log)
    def test_should_save_exception_message(self, mock_requests):
        some_error = 'I do not accept your message'
        mock_requests.post.side_effect = RequestException(some_error)

        data = json.dumps(self.bulk_sms_to_post)

        response = self.client.post(self.BULK_SMS_ENDPOINT, data=data, content_type="application/json")

        self.assertTrue(mock_requests.post.called_once_with(API_URL, json.dumps(self.bulk_sms_to_post), self.headers))
        self.assertEqual(201, response.status_code)

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("RequestException: %s" % some_error, retrieved_sms[0].log)
Exemple #11
0
    def test_invalid_token(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        some_id = 1234
        request_post = MagicMock()
        request_post.status_code = 403
        request_post.json.return_value = {u'detail': u'Invalid token'}
        mock_requests.post.return_value = request_post

        send_bulk_sms(sent_message_obj)

        self.assertTrue(mock_requests.post.called_once_with(API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("403: {u'detail': u'Invalid token'}", retrieved_sms[0].log)
Exemple #12
0
    def test_non_201_responses_are_logged(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        some_id = 1234
        request_post = MagicMock()
        request_post.status_code = 400
        request_post.json.return_value = {"text": "This field is required."}
        mock_requests.post.return_value = request_post

        send_bulk_sms(sent_message_obj)

        self.assertTrue(mock_requests.post.called_once_with(API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("400: {'text': 'This field is required.'}", retrieved_sms[0].log)
Exemple #13
0
    def test_should_send_message(self, mock_requests):
        sent_message_obj = SentMessage(**self.bulk_sms_to_post).save()
        some_id = 1234
        success_log = '201: rapid_pro_id = 1234'
        request_post = MagicMock()
        request_post.status_code = 201
        request_post.json.return_value = {"messages": [some_id], "sms": [some_id]}
        mock_requests.post.return_value = request_post

        send_bulk_sms(sent_message_obj)

        self.assertTrue(mock_requests.post.called_once_with(API_URL, json.dumps(self.bulk_sms_to_post), self.headers))

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual(success_log, retrieved_sms[0].log)
    def test_should_post_sent_bulk_messages_and_save_logs(self, mock_requests):
        success_log = '201: rapid_pro_id = 1234'
        some_id = 1234
        mock_response = MagicMock()
        mock_response.status_code = 201
        mock_response.json.return_value = {"messages": [some_id], "sms": [some_id]}
        mock_requests.post.return_value = mock_response
        data = json.dumps(self.bulk_sms_to_post)

        response = self.client.post(self.BULK_SMS_ENDPOINT, data=data, content_type="application/json")

        self.assertTrue(mock_requests.post.called_once_with(API_URL, json.dumps(self.bulk_sms_to_post), self.headers))
        self.assertEqual(201, response.status_code)

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual(success_log, retrieved_sms[0].log)
    def test_should_save_exception_message(self, mock_requests):
        some_error = 'I do not accept your message'
        mock_requests.post.side_effect = RequestException(some_error)

        data = json.dumps(self.bulk_sms_to_post)

        response = self.client.post(self.BULK_SMS_ENDPOINT,
                                    data=data,
                                    content_type="application/json")

        self.assertTrue(
            mock_requests.post.called_once_with(
                API_URL, json.dumps(self.bulk_sms_to_post), self.headers))
        self.assertEqual(201, response.status_code)

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual("RequestException: %s" % some_error,
                         retrieved_sms[0].log)
    def test_should_post_sent_bulk_messages_and_save_logs(self, mock_requests):
        success_log = '201: rapid_pro_id = 1234'
        some_id = 1234
        mock_response = MagicMock()
        mock_response.status_code = 201
        mock_response.json.return_value = {
            "messages": [some_id],
            "sms": [some_id]
        }
        mock_requests.post.return_value = mock_response
        data = json.dumps(self.bulk_sms_to_post)

        response = self.client.post(self.BULK_SMS_ENDPOINT,
                                    data=data,
                                    content_type="application/json")

        self.assertTrue(
            mock_requests.post.called_once_with(
                API_URL, json.dumps(self.bulk_sms_to_post), self.headers))
        self.assertEqual(201, response.status_code)

        retrieved_sms = SentMessage.objects(**self.bulk_sms_to_post)
        self.assertEqual(1, retrieved_sms.count())
        self.assertEqual(success_log, retrieved_sms[0].log)
 def test_should_serialize_location_object(self):
     sms = SentMessage(**self.sms).save()
     serialized_object = SentMessageSerializer(sms)
     self.assertDictContainsSubset(self.serialized_sms, serialized_object.data)
     self.assertIsNotNone(serialized_object.data['id'])