diff --git a/HISTORY.rst b/HISTORY.rst index ffcddc000f..4f44480e22 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -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. diff --git a/mayan/apps/mailer/classes.py b/mayan/apps/mailer/classes.py index f2693394c7..4c5d7de4cf 100644 --- a/mayan/apps/mailer/classes.py +++ b/mayan/apps/mailer/classes.py @@ -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)): diff --git a/mayan/apps/mailer/forms.py b/mayan/apps/mailer/forms.py index 91617ec00f..79843fa9e7 100644 --- a/mayan/apps/mailer/forms.py +++ b/mayan/apps/mailer/forms.py @@ -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) diff --git a/mayan/apps/mailer/tests/literals.py b/mayan/apps/mailer/tests/literals.py index 9c1f0dd8c9..e30ae77e3d 100644 --- a/mayan/apps/mailer/tests/literals.py +++ b/mayan/apps/mailer/tests/literals.py @@ -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' diff --git a/mayan/apps/mailer/tests/test_views.py b/mayan/apps/mailer/tests/test_views.py index effafc8fa1..710f5192e6 100644 --- a/mayan/apps/mailer/tests/test_views.py +++ b/mayan/apps/mailer/tests/test_views.py @@ -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()