From 2752bbb7514a221aa4a57b58150c6f015f9dbff1 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/migrations/0018_smslog.py | 24 +++++++++++++++++++++++ passerelle/base/models.py | 17 +++++++++++++--- tests/test_sms.py | 18 ++++++++++++++++- 3 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 passerelle/base/migrations/0018_smslog.py diff --git a/passerelle/base/migrations/0018_smslog.py b/passerelle/base/migrations/0018_smslog.py new file mode 100644 index 00000000..1e4b26c4 --- /dev/null +++ b/passerelle/base/migrations/0018_smslog.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2020-03-10 17:26 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0017_auto_20200310_1806'), + ] + + operations = [ + migrations.CreateModel( + name='SMSLog', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ('appname', models.CharField(max_length=128, null=True, verbose_name='appname')), + ('slug', models.CharField(max_length=128, null=True, verbose_name='slug')), + ], + ), + ] 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