Projet

Général

Profil

0001-manager-add-test-sms-send-20174.patch

Serghei Mihai, 04 décembre 2017 18:24

Télécharger (10 ko)

Voir les différences:

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
corbo/forms.py
81 81

  
82 82
class SendTestEmailForm(forms.Form):
83 83
    email = forms.EmailField()
84

  
85

  
86
class SendTestSMSForm(forms.Form):
87
    mobile = forms.CharField(label=_('Mobile number'))
corbo/manage_urls.py
2 2

  
3 3
from .views import add_announce, edit_announce, delete_announce, \
4 4
    add_category, edit_category, view_category, delete_category, manage, \
5
    subscriptions_import, view_announce, email_announce, menu_json
5
    subscriptions_import, view_announce, email_announce, sms_announce, \
6
    menu_json
6 7

  
7 8
urlpatterns = patterns('',
8 9
            url(r'^$', manage, name='manage'),
......
14 15
                name='delete_announce'),
15 16
            url(r'^announce/email/(?P<pk>\d+)/$', email_announce,
16 17
                name='email_announce'),
18
            url(r'^announce/sms/(?P<pk>\d+)/$', sms_announce,
19
                name='sms_announce'),
17 20
            url(r'^category/(?P<slug>[\w-]+)/$', view_category,
18 21
                name='view_category'),
19 22
            url(r'^announce/(?P<pk>\d+)/$', view_announce,
corbo/templates/corbo/announce_view.html
12 12
<a href="{% url 'delete_announce' pk=object.pk %}" rel="popup">{% trans 'Delete' %}</a>
13 13
<a href="{% url 'edit_announce' pk=object.pk %}">{% trans 'Edit' %}</a>
14 14
<a href="{% url 'email_announce' pk=object.pk %}" rel="popup">{% trans 'Send test email' %}</a>
15
{% if sms_enabled %}
16
<a href="{% url 'sms_announce' pk=object.pk %}" rel="popup">{% trans 'Send test SMS' %}</a>
17
{% endif %}
15 18
{% endblock %}
16 19
{% block content %}
17 20
<div class="announce_block">
corbo/templates/corbo/email_test_announce_form.html
1
{% extends "corbo/send_test_announce_form.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{% trans "Send test email" %}</h2>
6
{% endblock %}
corbo/templates/corbo/test_email_send_form.html → corbo/templates/corbo/send_test_announce_form.html
7 7
{% endblock %}
8 8

  
9 9
{% block appbar %}
10
<h2>{% trans "Send test email" %}</h2>
10
<h2>
11
{% blocktrans %}
12
Send test {{ action }}
13
{% endblocktrans %}
14
</h2>
11 15
{% endblock %}
12 16

  
13 17

  
corbo/templates/corbo/sms_test_announce_form.html
1
{% extends "corbo/send_test_announce_form.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{% trans "Send test SMS" %}</h2>
6
{% endblock %}
corbo/views.py
20 20

  
21 21
import models
22 22
from .forms import AnnounceForm, CategoryForm, SubscriptionsImportForm, \
23
    SendTestEmailForm
23
    SendTestEmailForm, SendTestSMSForm
24 24
from . import utils
25 25

  
26 26
try:
......
264 264
        context = super(AnnounceView, self).get_context_data(**kwargs)
265 265
        context['category'] = self.object.category
266 266
        context['broadcasts'] = self.object.broadcast_set.filter(deliver_time__isnull=False)
267
        context['sms_enabled'] = settings.SMS_GATEWAY_URL
267 268
        return context
268 269

  
269 270
view_announce = AnnounceView.as_view()
270 271

  
271 272

  
272
class EmailAnnounceView(FormView):
273
    form_class = SendTestEmailForm
274
    template_name = 'corbo/test_email_send_form.html'
275

  
273
class SendAnnounceView(FormView):
276 274
    def get_initial(self):
277
        return {'email': self.request.user.email}
275
        return {'email': self.request.user.email,
276
                'mobile': self.request.session.get('mellon_session', {}).get('mobile', '')}
278 277

  
279 278
    def get_success_url(self, *args, **kwargs):
280 279
        return reverse('view_announce', kwargs={'pk': self.kwargs['pk']})
281 280

  
281
    def get_context_data(self, **kwargs):
282
        context = super(SendAnnounceView, self).get_context_data(**kwargs)
283
        context['object'] = models.Announce.objects.get(pk=self.kwargs['pk'])
284
        return context
285

  
286

  
287
class EmailAnnounceView(SendAnnounceView):
288
    form_class = SendTestEmailForm
289
    template_name = 'corbo/email_test_announce_form.html'
290

  
282 291
    def form_valid(self, form):
283 292
        email = form.cleaned_data['email']
284 293
        announce = models.Announce.objects.get(pk=self.kwargs['pk'])
......
286 295
        messages.info(self.request, _('Email successfully sent'))
287 296
        return super(EmailAnnounceView, self).form_valid(form)
288 297

  
289
    def get_context_data(self, **kwargs):
290
        context = super(EmailAnnounceView, self).get_context_data(**kwargs)
291
        context['object'] = models.Announce.objects.get(pk=self.kwargs['pk'])
292
        return context
293

  
294 298
email_announce = EmailAnnounceView.as_view()
295 299

  
300

  
301
class SMSAnnounceView(SendAnnounceView):
302
    form_class = SendTestSMSForm
303
    template_name = 'corbo/sms_test_announce_form.html'
304

  
305
    def form_valid(self, form):
306
        mobile = form.cleaned_data['mobile']
307
        announce = models.Announce.objects.get(pk=self.kwargs['pk'])
308
        utils.send_sms(announce.text, [mobile])
309
        messages.info(self.request, _('SMS successfully sent'))
310
        return super(SMSAnnounceView, self).form_valid(form)
311

  
312
sms_announce = SMSAnnounceView.as_view()
313

  
314

  
296 315
def menu_json(request):
297 316
    label = _('Announces')
298 317
    json_str = json.dumps([{'label': force_text(label),
tests/test_manager.py
3 3

  
4 4
from django.core.urlresolvers import reverse
5 5
from django.contrib.auth.models import User
6
from django.test import override_settings
6 7

  
7 8
from corbo.models import Broadcast
8 9

  
......
209 210
    assert resp.status_int == 302
210 211
    assert resp.location == 'http://testserver/manage/category/alerts/'
211 212

  
212
def test_send_announce(app, admin_user):
213
def test_email_announce(app, admin_user):
213 214
    app = login(app)
214 215
    resp = app.get('/manage/')
215 216
    assert 'New category' in resp.content
......
233 234
    assert 'First announce' in resp.content
234 235
    resp = resp.click('First announce')
235 236
    assert 'Send test email' in resp.content
237
    assert 'Send test SMS' not in resp.content
236 238
    resp = resp.click('Send test email')
237 239
    send_form = resp.forms[0]
238 240
    assert send_form.method == 'post'
......
243 245
    resp = send_form.submit()
244 246
    assert resp.status_int == 302
245 247
    assert resp.location == 'http://testserver/manage/announce/1/'
248

  
249
def test_sms_announce(app, admin_user):
250
    app = login(app)
251
    resp = app.get('/manage/')
252
    assert 'New category' in resp.content
253
    category_page = resp.click('New category')
254
    category_form = category_page.forms[0]
255
    category_form['name'] = 'Alerts'
256
    resp = category_form.submit()
257
    assert resp.status_int == 302
258
    assert resp.location == 'http://testserver/manage/'
259
    resp = app.get('http://testserver/manage/')
260
    resp = resp.click('Alerts')
261
    assert 'New announce' in resp.content
262
    announce_page = resp.click('New announce')
263
    announce_form = announce_page.forms[0]
264
    announce_form['title'] = 'First announce'
265
    announce_form['text'] = 'announce content'
266
    resp = announce_form.submit()
267
    assert resp.status_int == 302
268
    assert resp.location == 'http://testserver/manage/category/alerts/'
269
    resp = app.get(resp.location)
270
    assert 'First announce' in resp.content
271
    with override_settings(SMS_GATEWAY_URL='http:/passerelle.com'):
272
        resp = resp.click('First announce')
273
        assert 'Send test SMS' in resp.content
274
        resp = resp.click('Send test SMS')
275
        send_form = resp.forms[0]
276
        assert send_form.method == 'post'
277
        assert 'mobile' in send_form.fields
278
        assert send_form.fields['mobile'][0].value == ''
279
        assert 'Send' in resp.content
280
        assert 'Cancel' in resp.content
281
        resp = send_form.submit()
282
        assert resp.status_int == 200
283
        form = resp.forms[0]
284
        form['mobile'] = '0607080900'
285
        resp = form.submit()
286
        assert resp.location == 'http://testserver/manage/announce/1/'
246
-