add test email sending (#13358)

This commit is contained in:
Serghei Mihai 2017-02-24 16:08:37 +01:00
parent a1df96238e
commit e18d4cf506
7 changed files with 105 additions and 5 deletions

View File

@ -77,3 +77,7 @@ class SubscriptionsImportForm(forms.Form):
raise ValidationError(_('Invalid email address at line %d' % idx))
subscribers.append(row[0])
return subscribers
class SendTestEmailForm(forms.Form):
email = forms.EmailField()

View File

@ -2,7 +2,7 @@ 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, menu_json
subscriptions_import, view_announce, email_announce, menu_json
urlpatterns = patterns('',
url(r'^$', manage, name='manage'),
@ -12,6 +12,8 @@ urlpatterns = patterns('',
name='edit_announce'),
url(r'^announce/delete/(?P<pk>\d+)$', delete_announce,
name='delete_announce'),
url(r'^announce/email/(?P<pk>\d+)/$', email_announce,
name='email_announce'),
url(r'^category/(?P<slug>[\w-]+)/$', view_category,
name='view_category'),
url(r'^announce/(?P<pk>\d+)/$', view_announce,

View File

@ -11,6 +11,7 @@
<h2>{{ object.title }}</h2>
<a href="{% url 'delete_announce' pk=object.pk %}" rel="popup">{% trans 'Delete' %}</a>
<a href="{% url 'edit_announce' pk=object.pk %}">{% trans 'Edit' %}</a>
<a href="{% url 'email_announce' pk=object.pk %}" rel="popup">{% trans 'Send test email' %}</a>
{% endblock %}
{% block content %}
<div class="announce_block">

View File

@ -3,6 +3,14 @@
{% block appbar %}
<h2>{% trans "Categories" %}</h2>
{% if extra_actions %}
<a class="extra-actions-menu-opener"></a>
<ul class="extra-actions-menu">
{% for extra_action in extra_actions %}
<li><a href="{{ extra_action.url }}" rel="popup">{{ extra_action.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
<a href="{% url 'add_category' %}" rel='popup'>{% trans 'New category' %}</a>
{% endblock %}

View File

@ -0,0 +1,23 @@
{% extends "corbo/manage.html" %}
{% load i18n static %}
{% block breadcrumb %}
{{ block.super }}
<a href="{% url "view_announce" pk=object.pk %}">{{ object.title }}</a>
{% endblock %}
{% block appbar %}
<h2>{% trans "Send test email" %}</h2>
{% endblock %}
{% block content %}
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<div class="buttons">
<button class="submit-button">{% trans "Send" %}</button>
<a href="{% url "view_announce" pk=object.pk %}" class="cancel">{% trans "Cancel" %}</a>
</div>
</form>
{% endblock %}

View File

@ -6,7 +6,7 @@ from django.core import signing
from django.utils import timezone
from django.core.urlresolvers import reverse
from django.views.generic import CreateView, UpdateView, DeleteView, \
ListView, TemplateView, RedirectView, DetailView, FormView
ListView, TemplateView, RedirectView, DetailView, FormView, RedirectView
from django.contrib.syndication.views import Feed
from django.shortcuts import resolve_url
from django.utils.encoding import force_text
@ -19,7 +19,9 @@ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ngettext
import models
from .forms import AnnounceForm, CategoryForm, SubscriptionsImportForm
from .forms import AnnounceForm, CategoryForm, SubscriptionsImportForm, \
SendTestEmailForm
from . import utils
try:
from mellon.utils import get_idps
@ -186,7 +188,6 @@ class ManageView(ListView):
model = models.Category
paginate_by = settings.CATEGORIES_PER_PAGE
manage = ManageView.as_view()
@ -268,6 +269,30 @@ class AnnounceView(DetailView):
view_announce = AnnounceView.as_view()
class EmailAnnounceView(FormView):
form_class = SendTestEmailForm
template_name = 'corbo/test_email_send_form.html'
def get_initial(self):
return {'email': self.request.user.email}
def get_success_url(self, *args, **kwargs):
return reverse('view_announce', kwargs={'pk': self.kwargs['pk']})
def form_valid(self, form):
email = form.cleaned_data['email']
announce = models.Announce.objects.get(pk=self.kwargs['pk'])
utils.send_email(announce.title, announce.text, [email], announce.category.pk)
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()
def menu_json(request):
label = _('Announces')
json_str = json.dumps([{'label': force_text(label),

View File

@ -13,7 +13,7 @@ def admin_user():
try:
user = User.objects.get(username='admin')
except User.DoesNotExist:
user = User.objects.create_superuser('admin', email=None, password='admin')
user = User.objects.create_superuser('admin', email='admin@example.com', password='admin')
return user
def login(app, username='admin', password='admin'):
@ -147,6 +147,7 @@ def test_edit_announce(app, admin_user):
announce_page = resp.click('First announce')
assert 'First announce' in announce_page.content
assert 'Edit' in announce_page.content
assert 'Send test email' in announce_page.content
assert 'Delete' in announce_page.content
announce_edit_page = announce_page.click('Edit')
edit_form = announce_edit_page.forms[0]
@ -202,8 +203,44 @@ def test_delete_announce(app, admin_user):
assert 'First announce' in resp.content
resp = resp.click('First announce')
assert 'Delete' in resp.content
assert 'Send test email' in resp.content
announce_delete_page = resp.click('Delete')
announce_delete_form = announce_delete_page.forms[0]
resp = announce_delete_form.submit()
assert resp.status_int == 302
assert resp.location == 'http://testserver/manage/category/alerts/'
def test_send_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
resp = resp.click('First announce')
assert 'Send test email' in resp.content
resp = resp.click('Send test email')
send_form = resp.forms[0]
assert send_form.method == 'post'
assert 'email' in send_form.fields
assert send_form.fields['email'][0].value == admin_user.email
assert 'Send' in resp.content
assert 'Cancel' in resp.content
resp = send_form.submit()
assert resp.status_int == 302
assert resp.location == 'http://testserver/manage/announce/1/'