Fix new mailer creation view. GitLab issue #431.

Thanks to Robert Schöftner (@robert.schoeftner) for the
report and the solution.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-09-05 01:40:01 -04:00
parent 9d65eeeee1
commit 78d3dd8b9b
5 changed files with 81 additions and 38 deletions

View File

@@ -1,3 +1,9 @@
2.7.2 (2017-09-XX)
==================
- Fix new mailer creation view. GitLab issue #431.
Thanks to Robert Schöftner(@robert.schoeftner) for the
report and the solution.
2.7.1 (2017-09-03)
==================
- Support unicode in URL querystring. GitLab issue #423.

View File

@@ -46,7 +46,7 @@ class MailerBackendBase(object):
"""
class_path = '' # Dot path to the actual class that will handle the mail
fields = ()
fields = {}
class MailerBackend(six.with_metaclass(MailerBackendMetaclass, MailerBackendBase)):

View File

@@ -105,9 +105,9 @@ class UserMailerDynamicForm(DynamicModelForm):
# 'backend_data'.
backend_data = {}
for field in self.schema['fields']:
backend_data[field['name']] = data.pop(
field['name'], field.get('default', None)
for field_name, field_data in self.schema['fields'].items():
backend_data[field_name] = data.pop(
field_name, field_data.get('default', None)
)
data['backend_data'] = json.dumps(backend_data)

View File

@@ -7,5 +7,5 @@ TEST_RECIPIENTS_MULTIPLE_MIXED = 'test@example.com,test2@example.com;test2@examp
TEST_RECIPIENTS_MULTIPLE_MIXED_LIST = (
'test@example.com', 'test2@example.com', 'test2@example.com',
)
TEST_USER_MAILER_LABEL = 'test user mailer label'
TEST_USER_MAILER_BACKEND_PATH = 'mailer.tests.mailers.TestBackend'
TEST_USER_MAILER_LABEL = 'test user mailer label'

View File

@@ -7,12 +7,14 @@ from documents.tests.test_views import GenericDocumentViewTestCase
from ..models import UserMailer
from ..permissions import (
permission_mailing_link, permission_mailing_send_document,
permission_user_mailer_use, permission_user_mailer_view
permission_user_mailer_create, permission_user_mailer_use,
permission_user_mailer_view
)
from .literals import (
TEST_EMAIL_ADDRESS, TEST_USER_MAILER_BACKEND_PATH, TEST_USER_MAILER_LABEL
)
from .mailers import TestBackend
class MailerTestMixin(object):
@@ -46,6 +48,29 @@ class MailerViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
},
)
def _request_user_mailer_create(self):
return self.post(
'mailer:user_mailer_create', args=(
TEST_USER_MAILER_BACKEND_PATH,
), data={
'default': True,
'enabled': True,
'label': TEST_USER_MAILER_LABEL,
}, follow=True
)
def _request_user_mailer_delete(self):
return self.post(
'mailer:user_mailer_delete', args=(self.user_mailer.pk,)
)
def _request_user_mailer_test(self):
return self.post(
'mailer:user_mailer_test', args=(self.user_mailer.pk,), data={
'email': TEST_EMAIL_ADDRESS
}, follow=True
)
def test_mail_link_view_no_permissions(self):
self._create_user_mailer()
self.login_user()
@@ -89,9 +114,50 @@ class MailerViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].to, [TEST_EMAIL_ADDRESS])
def _request_user_mailer_delete(self):
return self.post(
'mailer:user_mailer_delete', args=(self.user_mailer.pk,)
def test_user_mailer_create_view_no_permissions(self):
self.login_user()
self.grant_permission(permission=permission_user_mailer_view)
response = self._request_user_mailer_create()
self.assertNotContains(
response, text=TestBackend.label, status_code=403
)
self.assertEqual(UserMailer.objects.count(), 0)
def test_user_mailer_create_view_with_permissions(self):
self.login_user()
self.grant_permission(permission=permission_user_mailer_create)
self.grant_permission(permission=permission_user_mailer_view)
response = self._request_user_mailer_create()
self.assertContains(
response, text=TestBackend.label, status_code=200
)
self.assertEqual(UserMailer.objects.count(), 1)
def test_user_mailer_delete_view_no_permissions(self):
self._create_user_mailer()
self.login_user()
self._request_user_mailer_delete()
self.assertQuerysetEqual(
UserMailer.objects.all(), (repr(self.user_mailer),)
)
def test_user_mailer_delete_view_with_permissions(self):
self._create_user_mailer()
self.login_user()
self.grant_permission(permission=permission_user_mailer_view)
self._request_user_mailer_delete()
self.assertNotEqual(
[UserMailer.objects.all()], [self.user_mailer]
)
def test_user_mailer_list_view_no_permissions(self):
@@ -119,35 +185,6 @@ class MailerViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
response, text=self.user_mailer.label, status_code=200
)
def test_user_mailer_delete_view_no_permissions(self):
self._create_user_mailer()
self.login_user()
self._request_user_mailer_delete()
self.assertQuerysetEqual(
UserMailer.objects.all(), (repr(self.user_mailer),)
)
def test_user_mailer_delete_view_with_permissions(self):
self._create_user_mailer()
self.login_user()
self.grant_permission(permission=permission_user_mailer_view)
self._request_user_mailer_delete()
self.assertNotEqual(
[UserMailer.objects.all()], [self.user_mailer]
)
def _request_user_mailer_test(self):
return self.post(
'mailer:user_mailer_test', args=(self.user_mailer.pk,), data={
'email': TEST_EMAIL_ADDRESS
}, follow=True
)
def test_user_mailer_test_view_no_permissions(self):
self._create_user_mailer()
self.login_user()