Projet

Général

Profil

0002-base-add-maximum-sms-length-option-39654.patch

Valentin Deniaud, 10 mars 2020 17:08

Télécharger (8,01 ko)

Voir les différences:

Subject: [PATCH 2/2] base: add maximum sms length option (#39654)

 ...09_choositsmsgateway_max_message_length.py | 20 +++++++++++++++
 .../migrations/0008_auto_20200310_1539.py     | 25 +++++++++++++++++++
 .../migrations/0007_auto_20200310_1539.py     | 25 +++++++++++++++++++
 .../0008_ovhsmsgateway_max_message_length.py  | 20 +++++++++++++++
 .../0008_oxydsmsgateway_max_message_length.py | 20 +++++++++++++++
 passerelle/base/models.py                     |  3 +++
 tests/test_sms.py                             | 18 +++++++++++++
 7 files changed, 131 insertions(+)
 create mode 100644 passerelle/apps/choosit/migrations/0009_choositsmsgateway_max_message_length.py
 create mode 100644 passerelle/apps/mobyt/migrations/0008_auto_20200310_1539.py
 create mode 100644 passerelle/apps/orange/migrations/0007_auto_20200310_1539.py
 create mode 100644 passerelle/apps/ovh/migrations/0008_ovhsmsgateway_max_message_length.py
 create mode 100644 passerelle/apps/oxyd/migrations/0008_oxydsmsgateway_max_message_length.py
passerelle/apps/choosit/migrations/0009_choositsmsgateway_max_message_length.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-03-10 14:39
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('choosit', '0008_auto_20181118_0807'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='choositsmsgateway',
17
            name='max_message_length',
18
            field=models.IntegerField(default=160, verbose_name='Maximum message length'),
19
        ),
20
    ]
passerelle/apps/mobyt/migrations/0008_auto_20200310_1539.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-03-10 14:39
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('mobyt', '0007_auto_20181118_0807'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='mobytsmsgateway',
17
            name='max_message_length',
18
            field=models.IntegerField(default=160, verbose_name='Maximum message length'),
19
        ),
20
        migrations.AlterField(
21
            model_name='mobytsmsgateway',
22
            name='quality',
23
            field=models.CharField(choices=[('l', 'sms direct'), ('ll', 'sms low-cost'), ('n', 'sms top')], default='l', max_length=4, verbose_name='Message quality'),
24
        ),
25
    ]
passerelle/apps/orange/migrations/0007_auto_20200310_1539.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-03-10 14:39
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('orange', '0006_remove_orangesmsgateway_log_level'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='orangesmsgateway',
17
            name='max_message_length',
18
            field=models.IntegerField(default=160, verbose_name='Maximum message length'),
19
        ),
20
        migrations.AlterField(
21
            model_name='orangesmsgateway',
22
            name='keystore',
23
            field=models.FileField(blank=True, help_text='Certificate and private key in PEM format', null=True, upload_to='orange', verbose_name='Keystore'),
24
        ),
25
    ]
passerelle/apps/ovh/migrations/0008_ovhsmsgateway_max_message_length.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-03-10 14:39
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('ovh', '0007_auto_20181118_0807'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='ovhsmsgateway',
17
            name='max_message_length',
18
            field=models.IntegerField(default=160, verbose_name='Maximum message length'),
19
        ),
20
    ]
passerelle/apps/oxyd/migrations/0008_oxydsmsgateway_max_message_length.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2020-03-10 14:39
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('oxyd', '0007_auto_20181118_0807'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='oxydsmsgateway',
17
            name='max_message_length',
18
            field=models.IntegerField(default=160, verbose_name='Maximum message length'),
19
        ),
20
    ]
passerelle/base/models.py
908 908

  
909 909
    _can_send_messages_description = _('Sending messages is limited to the following API users:')
910 910

  
911
    max_message_length = models.IntegerField(_('Maximum message length'), default=160)
912

  
911 913
    @classmethod
912 914
    def clean_numbers(cls, destinations, default_country_code='33',
913 915
                      default_trunk_prefix='0'):  # Yeah France first !
......
945 947
                'to is not a list of strings'
946 948
        except (ValueError, AssertionError) as e:
947 949
            raise APIError('Payload error: %s' % e)
950
        data['message'] = data['message'][:self.max_message_length]
948 951
        logging.info('sending message %r to %r with sending number %r',
949 952
                     data['message'], data['to'], data['from'])
950 953
        if 'nostop' in request.GET:
tests/test_sms.py
1
import mock
1 2
import pytest
2 3

  
3 4
from django.contrib.contenttypes.models import ContentType
4 5

  
6
from passerelle.apps.ovh.models import OVHSMSGateway
5 7
from passerelle.base.models import ApiUser, AccessRight, SMSResource
6 8

  
7 9
from test_manager import login, admin_user
......
70 72
    resp = app.get(url)
71 73
    assert 'Endpoints' in resp.text
72 74
    assert 'accessright/add' in resp.text
75

  
76

  
77
@pytest.mark.parametrize('connector', [OVHSMSGateway], indirect=True)
78
def test_sms_max_message_length(app, connector):
79
    path = '/%s/%s/send/' % (connector.get_connector_slug(), connector.slug)
80

  
81
    message_above_limit = 'a' * (connector.max_message_length + 1)
82
    payload = {
83
        'message': message_above_limit,
84
        'from': '+33699999999',
85
        'to': ['+33688888888'],
86
    }
87
    with mock.patch.object(OVHSMSGateway, 'send_msg') as send_function:
88
        send_function.return_value = {}
89
        result = app.post_json(path, params=payload)
90
        assert send_function.call_args[0][0] == 'a' * connector.max_message_length
73
-