From 95083958bbf45082cf8a401b38aa8f879cffaf83 Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Mon, 4 Dec 2017 17:30:06 +0100 Subject: [PATCH] manager: add test sms send (#20174) --- corbo/forms.py | 4 ++ corbo/manage_urls.py | 5 ++- corbo/templates/corbo/announce_view.html | 3 ++ .../templates/corbo/email_test_announce_form.html | 6 +++ ...send_form.html => send_test_announce_form.html} | 6 ++- corbo/templates/corbo/sms_test_announce_form.html | 6 +++ corbo/views.py | 41 +++++++++++++++------ tests/test_manager.py | 43 +++++++++++++++++++++- 8 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 corbo/templates/corbo/email_test_announce_form.html rename corbo/templates/corbo/{test_email_send_form.html => send_test_announce_form.html} (87%) create mode 100644 corbo/templates/corbo/sms_test_announce_form.html diff --git a/corbo/forms.py b/corbo/forms.py index 4df334e..7b1b336 100644 --- a/corbo/forms.py +++ b/corbo/forms.py @@ -81,3 +81,7 @@ class SubscriptionsImportForm(forms.Form): class SendTestEmailForm(forms.Form): email = forms.EmailField() + + +class SendTestSMSForm(forms.Form): + mobile = forms.CharField(label=_('Mobile number')) diff --git a/corbo/manage_urls.py b/corbo/manage_urls.py index 05bb0fb..7b126d0 100644 --- a/corbo/manage_urls.py +++ b/corbo/manage_urls.py @@ -2,7 +2,8 @@ from django.conf.urls import patterns, include, url from .views import add_announce, edit_announce, delete_announce, \ add_category, edit_category, view_category, delete_category, manage, \ - subscriptions_import, view_announce, email_announce, menu_json + subscriptions_import, view_announce, email_announce, sms_announce, \ + menu_json urlpatterns = patterns('', url(r'^$', manage, name='manage'), @@ -14,6 +15,8 @@ urlpatterns = patterns('', name='delete_announce'), url(r'^announce/email/(?P\d+)/$', email_announce, name='email_announce'), + url(r'^announce/sms/(?P\d+)/$', sms_announce, + name='sms_announce'), url(r'^category/(?P[\w-]+)/$', view_category, name='view_category'), url(r'^announce/(?P\d+)/$', view_announce, diff --git a/corbo/templates/corbo/announce_view.html b/corbo/templates/corbo/announce_view.html index ef5c9fc..4874c2f 100644 --- a/corbo/templates/corbo/announce_view.html +++ b/corbo/templates/corbo/announce_view.html @@ -12,6 +12,9 @@ {% trans 'Delete' %} {% trans 'Edit' %} {% trans 'Send test email' %} +{% if sms_enabled %} +{% trans 'Send test SMS' %} +{% endif %} {% endblock %} {% block content %}
diff --git a/corbo/templates/corbo/email_test_announce_form.html b/corbo/templates/corbo/email_test_announce_form.html new file mode 100644 index 0000000..082021c --- /dev/null +++ b/corbo/templates/corbo/email_test_announce_form.html @@ -0,0 +1,6 @@ +{% extends "corbo/send_test_announce_form.html" %} +{% load i18n %} + +{% block appbar %} +

{% trans "Send test email" %}

+{% endblock %} diff --git a/corbo/templates/corbo/test_email_send_form.html b/corbo/templates/corbo/send_test_announce_form.html similarity index 87% rename from corbo/templates/corbo/test_email_send_form.html rename to corbo/templates/corbo/send_test_announce_form.html index f3d4e5c..ddde5c1 100644 --- a/corbo/templates/corbo/test_email_send_form.html +++ b/corbo/templates/corbo/send_test_announce_form.html @@ -7,7 +7,11 @@ {% endblock %} {% block appbar %} -

{% trans "Send test email" %}

+

+{% blocktrans %} +Send test {{ action }} +{% endblocktrans %} +

{% endblock %} diff --git a/corbo/templates/corbo/sms_test_announce_form.html b/corbo/templates/corbo/sms_test_announce_form.html new file mode 100644 index 0000000..94d5db5 --- /dev/null +++ b/corbo/templates/corbo/sms_test_announce_form.html @@ -0,0 +1,6 @@ +{% extends "corbo/send_test_announce_form.html" %} +{% load i18n %} + +{% block appbar %} +

{% trans "Send test SMS" %}

+{% endblock %} diff --git a/corbo/views.py b/corbo/views.py index c61e58b..2c73f67 100644 --- a/corbo/views.py +++ b/corbo/views.py @@ -20,7 +20,7 @@ from django.utils.translation import ngettext import models from .forms import AnnounceForm, CategoryForm, SubscriptionsImportForm, \ - SendTestEmailForm + SendTestEmailForm, SendTestSMSForm from . import utils try: @@ -264,21 +264,30 @@ class AnnounceView(DetailView): context = super(AnnounceView, self).get_context_data(**kwargs) context['category'] = self.object.category context['broadcasts'] = self.object.broadcast_set.filter(deliver_time__isnull=False) + context['sms_enabled'] = settings.SMS_GATEWAY_URL return context view_announce = AnnounceView.as_view() -class EmailAnnounceView(FormView): - form_class = SendTestEmailForm - template_name = 'corbo/test_email_send_form.html' - +class SendAnnounceView(FormView): def get_initial(self): - return {'email': self.request.user.email} + return {'email': self.request.user.email, + 'mobile': self.request.session.get('mellon_session', {}).get('mobile', '')} def get_success_url(self, *args, **kwargs): return reverse('view_announce', kwargs={'pk': self.kwargs['pk']}) + def get_context_data(self, **kwargs): + context = super(SendAnnounceView, self).get_context_data(**kwargs) + context['object'] = models.Announce.objects.get(pk=self.kwargs['pk']) + return context + + +class EmailAnnounceView(SendAnnounceView): + form_class = SendTestEmailForm + template_name = 'corbo/email_test_announce_form.html' + def form_valid(self, form): email = form.cleaned_data['email'] announce = models.Announce.objects.get(pk=self.kwargs['pk']) @@ -286,13 +295,23 @@ class EmailAnnounceView(FormView): messages.info(self.request, _('Email successfully sent')) return super(EmailAnnounceView, self).form_valid(form) - def get_context_data(self, **kwargs): - context = super(EmailAnnounceView, self).get_context_data(**kwargs) - context['object'] = models.Announce.objects.get(pk=self.kwargs['pk']) - return context - email_announce = EmailAnnounceView.as_view() + +class SMSAnnounceView(SendAnnounceView): + form_class = SendTestSMSForm + template_name = 'corbo/sms_test_announce_form.html' + + def form_valid(self, form): + mobile = form.cleaned_data['mobile'] + announce = models.Announce.objects.get(pk=self.kwargs['pk']) + utils.send_sms(announce.text, [mobile]) + messages.info(self.request, _('SMS successfully sent')) + return super(SMSAnnounceView, self).form_valid(form) + +sms_announce = SMSAnnounceView.as_view() + + def menu_json(request): label = _('Announces') json_str = json.dumps([{'label': force_text(label), diff --git a/tests/test_manager.py b/tests/test_manager.py index bc3cdca..99e8702 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -3,6 +3,7 @@ import pytest from django.core.urlresolvers import reverse from django.contrib.auth.models import User +from django.test import override_settings from corbo.models import Broadcast @@ -209,7 +210,7 @@ def test_delete_announce(app, admin_user): assert resp.status_int == 302 assert resp.location == 'http://testserver/manage/category/alerts/' -def test_send_announce(app, admin_user): +def test_email_announce(app, admin_user): app = login(app) resp = app.get('/manage/') assert 'New category' in resp.content @@ -233,6 +234,7 @@ def test_send_announce(app, admin_user): assert 'First announce' in resp.content resp = resp.click('First announce') assert 'Send test email' in resp.content + assert 'Send test SMS' not in resp.content resp = resp.click('Send test email') send_form = resp.forms[0] assert send_form.method == 'post' @@ -243,3 +245,42 @@ def test_send_announce(app, admin_user): resp = send_form.submit() assert resp.status_int == 302 assert resp.location == 'http://testserver/manage/announce/1/' + +def test_sms_announce(app, admin_user): + app = login(app) + resp = app.get('/manage/') + assert 'New category' in resp.content + category_page = resp.click('New category') + category_form = category_page.forms[0] + category_form['name'] = 'Alerts' + resp = category_form.submit() + assert resp.status_int == 302 + assert resp.location == 'http://testserver/manage/' + resp = app.get('http://testserver/manage/') + resp = resp.click('Alerts') + assert 'New announce' in resp.content + announce_page = resp.click('New announce') + announce_form = announce_page.forms[0] + announce_form['title'] = 'First announce' + announce_form['text'] = 'announce content' + resp = announce_form.submit() + assert resp.status_int == 302 + assert resp.location == 'http://testserver/manage/category/alerts/' + resp = app.get(resp.location) + assert 'First announce' in resp.content + with override_settings(SMS_GATEWAY_URL='http:/passerelle.com'): + resp = resp.click('First announce') + assert 'Send test SMS' in resp.content + resp = resp.click('Send test SMS') + send_form = resp.forms[0] + assert send_form.method == 'post' + assert 'mobile' in send_form.fields + assert send_form.fields['mobile'][0].value == '' + assert 'Send' in resp.content + assert 'Cancel' in resp.content + resp = send_form.submit() + assert resp.status_int == 200 + form = resp.forms[0] + form['mobile'] = '0607080900' + resp = form.submit() + assert resp.location == 'http://testserver/manage/announce/1/' -- 2.15.1