From 0f83980dfa487cc73375a27cd16ad256f6a2ab29 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 10 Mar 2020 17:25:11 +0100 Subject: [PATCH 2/2] base: log sent sms time (#39651) --- passerelle/base/models.py | 17 ++++++++++++++--- tests/test_sms.py | 18 +++++++++++++++++- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 2ce19761..a43c8659 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -950,9 +950,20 @@ class SMSResource(BaseResource): data['message'] = data['message'][:self.max_message_length] logging.info('sending message %r to %r with sending number %r', data['message'], data['to'], data['from']) - if 'nostop' in request.GET: - return {'data': self.send_msg(data['message'], data['from'], data['to'], stop=False)} - return {'data': self.send_msg(data['message'], data['from'], data['to'], stop=True)} + stop = not bool('nostop' in request.GET) + result = {'data': self.send_msg(data['message'], data['from'], data['to'], stop=stop)} + SMSLog.objects.create(appname=self.get_connector_slug(), slug=self.slug) + return result class Meta: abstract = True + + +@six.python_2_unicode_compatible +class SMSLog(models.Model): + timestamp = models.DateTimeField(auto_now_add=True) + appname = models.CharField(max_length=128, verbose_name='appname', null=True) + slug = models.CharField(max_length=128, verbose_name='slug', null=True) + + def __str__(self): + return '%s %s %s' % (self.timestamp, self.appname, self.slug) diff --git a/tests/test_sms.py b/tests/test_sms.py index 1b41c3b8..c4b9d5c9 100644 --- a/tests/test_sms.py +++ b/tests/test_sms.py @@ -4,7 +4,7 @@ import pytest from django.contrib.contenttypes.models import ContentType from passerelle.apps.ovh.models import OVHSMSGateway -from passerelle.base.models import ApiUser, AccessRight, SMSResource +from passerelle.base.models import ApiUser, AccessRight, SMSResource, SMSLog from test_manager import login, admin_user @@ -88,3 +88,19 @@ def test_sms_max_message_length(app, connector): send_function.return_value = {} result = app.post_json(path, params=payload) assert send_function.call_args[0][0] == 'a' * connector.max_message_length + + +@pytest.mark.parametrize('connector', [OVHSMSGateway], indirect=True) +def test_sms_log(app, connector): + path = '/%s/%s/send/' % (connector.get_connector_slug(), connector.slug) + assert not SMSLog.objects.filter(appname=connector.get_connector_slug(), slug=connector.slug).exists() + + payload = { + 'message': 'plop', + 'from': '+33699999999', + 'to': ['+33688888888'], + } + with mock.patch.object(OVHSMSGateway, 'send_msg') as send_function: + send_function.return_value = {} + result = app.post_json(path, params=payload) + assert SMSLog.objects.filter(appname=connector.get_connector_slug(), slug=connector.slug).exists() -- 2.20.1