add test email sending (#13358)
This commit is contained in:
parent
a1df96238e
commit
e18d4cf506
|
@ -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()
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
||||
|
||||
|
|
|
@ -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 %}
|
|
@ -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),
|
||||
|
|
|
@ -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/'
|
||||
|
|
Reference in New Issue