sms: add a button to test sending sms (#45333)
This commit is contained in:
parent
6ff2dc4365
commit
257334fdc5
|
@ -0,0 +1,7 @@
|
|||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
class SmsTestSendForm(forms.Form):
|
||||
number = forms.CharField(label=_('To'), max_length=12)
|
||||
sender = forms.CharField(label=_('From'), max_length=12)
|
||||
message = forms.CharField(label=_('Message'), max_length=128)
|
|
@ -18,6 +18,7 @@ import re
|
|||
|
||||
from django.db import models
|
||||
from django.utils import six
|
||||
from django.utils.module_loading import import_string
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from passerelle.base.models import BaseResource
|
||||
|
@ -65,6 +66,10 @@ class SMSResource(BaseResource):
|
|||
|
||||
manager_view_template_name = 'passerelle/manage/messages_service_view.html'
|
||||
|
||||
@classmethod
|
||||
def get_management_urls(cls):
|
||||
return import_string('passerelle.sms.urls.management_urlpatterns')
|
||||
|
||||
def clean_numbers(self, destinations):
|
||||
numbers = []
|
||||
for dest in destinations:
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
{% extends "passerelle/base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block appbar %}
|
||||
<h2>{% trans "Sending a test SMS" %}</h2>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<div class="buttons">
|
||||
<button>{% trans "Send SMS" %}</button>
|
||||
<a class="cancel" href="{% url 'manage-home' %}">{% trans 'Cancel' %}</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -3,4 +3,11 @@
|
|||
|
||||
{% block endpoints %}
|
||||
{{ block.super }}
|
||||
{% if perms.base.view_accessright %}
|
||||
<div>
|
||||
<a rel="popup" href="/manage{{ object.get_absolute_url }}test-send/">
|
||||
{% trans 'Send a test message' %}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from . import views
|
||||
|
||||
management_urlpatterns = [
|
||||
url(r'^(?P<slug>[\w,-]+)/test-send/$',
|
||||
views.SmsTestSendView.as_view(), name='sms-test-send'),
|
||||
]
|
|
@ -0,0 +1,38 @@
|
|||
from django.apps import apps
|
||||
from django.contrib import messages
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.generic import FormView
|
||||
|
||||
from passerelle.utils.jsonresponse import APIError
|
||||
from passerelle.views import GenericConnectorMixin
|
||||
|
||||
from .forms import SmsTestSendForm
|
||||
|
||||
|
||||
class SmsTestSendView(GenericConnectorMixin, FormView):
|
||||
template_name = 'passerelle/manage/messages_service_test_send.html'
|
||||
|
||||
def get_form_class(self):
|
||||
return SmsTestSendForm
|
||||
|
||||
def get_object(self):
|
||||
return self.model.objects.get(slug=self.kwargs['slug'])
|
||||
|
||||
def get_success_url(self):
|
||||
connector = self.get_object()
|
||||
return connector.get_absolute_url()
|
||||
|
||||
def form_valid(self, form):
|
||||
number = form.cleaned_data['number']
|
||||
sender = form.cleaned_data['sender']
|
||||
message = form.cleaned_data['message']
|
||||
connector = self.get_object()
|
||||
try:
|
||||
number = connector.clean_numbers([number])[0]
|
||||
connector.send_msg(
|
||||
text=message, sender=sender, destinations=[number], stop=False)
|
||||
except APIError as exc:
|
||||
messages.error(self.request, _('Sending SMS fails: %s' % exc))
|
||||
else:
|
||||
messages.success(self.request, _('An SMS was just sent'))
|
||||
return super(SmsTestSendView, self).form_valid(form)
|
|
@ -4,6 +4,7 @@ import pytest
|
|||
from requests import RequestException
|
||||
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from passerelle.apps.ovh.models import OVHSMSGateway
|
||||
from passerelle.base.models import ApiUser, AccessRight, Job
|
||||
|
@ -225,3 +226,32 @@ def test_ovh_new_api(app, freezer):
|
|||
|
||||
request = mocked.handlers[0].call['requests'][0]
|
||||
assert 'X-Ovh-Signature' in request.headers
|
||||
|
||||
|
||||
@pytest.mark.parametrize('connector', [OVHSMSGateway], indirect=True)
|
||||
def test_sms_test_send(admin_user, app, connector):
|
||||
url = '/%s/%s/' % (connector.get_connector_slug(), connector.slug)
|
||||
resp = app.get(url)
|
||||
link = resp.html.find('div', {'id': 'endpoints'}).find_all('a')[-1]
|
||||
assert 'Send a test message' not in link.text
|
||||
|
||||
app = login(app)
|
||||
resp = app.get(url)
|
||||
link = resp.html.find('div', {'id': 'endpoints'}).find_all('a')[-1]
|
||||
assert 'Send a test message' in link.text
|
||||
assert link['href'] == reverse('sms-test-send', kwargs={
|
||||
'connector': connector.get_connector_slug(), 'slug': connector.slug})
|
||||
|
||||
resp = app.get(link['href'])
|
||||
resp.form['number'] = '+33688888888'
|
||||
resp.form['sender'] = '+33699999999'
|
||||
resp.form['message'] = 'hello'
|
||||
with mock.patch.object(OVHSMSGateway, 'send_msg') as send_function:
|
||||
send_function.return_value = {}
|
||||
resp = resp.form.submit()
|
||||
assert send_function.call_args[1] == {
|
||||
'text': 'hello', 'sender': '+33699999999', 'destinations': ['0033688888888'],
|
||||
'stop': False,
|
||||
}
|
||||
assert resp.status_code == 302
|
||||
assert resp.location == url
|
||||
|
|
Loading…
Reference in New Issue