From 7ba47d5c5f9229f9db0b0a830686d5048e091968 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 6 Feb 2019 01:08:14 -0400 Subject: [PATCH] Update mailer app Sort arguments. Fix failing tests. Sort view classes. Replace get_object() with self.object in the delete and edit views. Use ExternalObjectMixin to simplify views. Signed-off-by: Roberto Rosario --- mayan/apps/mailer/permissions.py | 20 +++++------ mayan/apps/mailer/queues.py | 6 ++-- mayan/apps/mailer/settings.py | 2 +- mayan/apps/mailer/tests/test_views.py | 18 ++++------ mayan/apps/mailer/urls.py | 10 +++--- mayan/apps/mailer/views.py | 51 +++++++++++---------------- 6 files changed, 47 insertions(+), 60 deletions(-) diff --git a/mayan/apps/mailer/permissions.py b/mayan/apps/mailer/permissions.py index 614dc71d0a..d0658a1113 100644 --- a/mayan/apps/mailer/permissions.py +++ b/mayan/apps/mailer/permissions.py @@ -7,26 +7,26 @@ from mayan.apps.permissions import PermissionNamespace namespace = PermissionNamespace(label=_('Mailing'), name='mailing') permission_mailing_link = namespace.add_permission( - name='mail_link', label=_('Send document link via email') + label=_('Send document link via email'), name='mail_link' ) permission_mailing_send_document = namespace.add_permission( - name='mail_document', label=_('Send document via email') + label=_('Send document via email'), name='mail_document' ) permission_view_error_log = namespace.add_permission( - name='view_error_log', label=_('View system mailing error log') + label=_('View system mailing error log'), name='view_error_log' ) permission_user_mailer_create = namespace.add_permission( - name='user_mailer_create', label=_('Create a mailing profile') + label=_('Create a mailing profile'), name='user_mailer_create' ) permission_user_mailer_delete = namespace.add_permission( - name='user_mailer_delete', label=_('Delete a mailing profile') + label=_('Delete a mailing profile'), name='user_mailer_delete' ) permission_user_mailer_edit = namespace.add_permission( - name='user_mailer_edit', label=_('Edit a mailing profile') -) -permission_user_mailer_view = namespace.add_permission( - name='user_mailer_view', label=_('View a mailing profile') + label=_('Edit a mailing profile'), name='user_mailer_edit' ) permission_user_mailer_use = namespace.add_permission( - name='user_mailer_use', label=_('Use a mailing profile') + label=_('Use a mailing profile'), name='user_mailer_use' +) +permission_user_mailer_view = namespace.add_permission( + label=_('View a mailing profile'), name='user_mailer_view' ) diff --git a/mayan/apps/mailer/queues.py b/mayan/apps/mailer/queues.py index 749c3b3b84..69477e4b8b 100644 --- a/mayan/apps/mailer/queues.py +++ b/mayan/apps/mailer/queues.py @@ -5,9 +5,9 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.task_manager.classes import CeleryQueue queue_mailing = CeleryQueue( - name='mailing', label=_('Mailing') + label=_('Mailing'), name='mailing' ) queue_mailing.add_task_type( - name='mayan.apps.mailer.tasks.task_send_document', - label=_('Send document') + label=_('Send document'), + name='mayan.apps.mailer.tasks.task_send_document' ) diff --git a/mayan/apps/mailer/settings.py b/mayan/apps/mailer/settings.py index 55f042860f..5e6db1b513 100644 --- a/mayan/apps/mailer/settings.py +++ b/mayan/apps/mailer/settings.py @@ -9,7 +9,7 @@ from .literals import ( DEFAULT_LINK_BODY_TEMPLATE, DEFAULT_LINK_SUBJECT_TEMPLATE ) -namespace = Namespace(name='mailer', label=_('Mailing')) +namespace = Namespace(label=_('Mailing'), name='mailer') setting_link_subject_template = namespace.add_setting( default=DEFAULT_LINK_SUBJECT_TEMPLATE, diff --git a/mayan/apps/mailer/tests/test_views.py b/mayan/apps/mailer/tests/test_views.py index 2906567e64..784a882479 100644 --- a/mayan/apps/mailer/tests/test_views.py +++ b/mayan/apps/mailer/tests/test_views.py @@ -26,10 +26,6 @@ from .mixins import MailerTestMixin class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase): - def setUp(self): - super(MailerViewsTestCase, self).setUp() - self.login_user() - def test_user_mailer_create_view_no_permissions(self): response = self._request_user_mailer_create() @@ -216,10 +212,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase): response = self._request_document_link_send() self.assertNotContains( - response=response, text=self.user_mailer.label, status_code=200 + response=response, text=self.user_mailer.label, status_code=404 ) self.assertNotContains( - response=response, text=self.document.label, status_code=200 + response=response, text=self.document.label, status_code=404 ) self.assertEqual(len(mail.outbox), 0) @@ -248,10 +244,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase): response = self._request_document_link_send() self.assertNotContains( - response=response, text=self.user_mailer.label, status_code=302 + response=response, text=self.user_mailer.label, status_code=404 ) self.assertNotContains( - response=response, text=self.document.label, status_code=302 + response=response, text=self.document.label, status_code=404 ) self.assertEqual(len(mail.outbox), 0) @@ -278,10 +274,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase): response = self._request_document_send() self.assertNotContains( - response=response, text=self.user_mailer.label, status_code=200 + response=response, text=self.user_mailer.label, status_code=404 ) self.assertNotContains( - response=response, text=self.document.label, status_code=200 + response=response, text=self.document.label, status_code=404 ) self.assertEqual(len(mail.outbox), 0) @@ -311,7 +307,7 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase): response = self._request_document_send() self.assertNotContains( - response=response, text=self.document.label, status_code=302 + response=response, text=self.document.label, status_code=404 ) self.assertEqual(len(mail.outbox), 0) diff --git a/mayan/apps/mailer/urls.py b/mayan/apps/mailer/urls.py index 915d0f7798..cd2c360cd8 100644 --- a/mayan/apps/mailer/urls.py +++ b/mayan/apps/mailer/urls.py @@ -14,11 +14,6 @@ urlpatterns = [ regex=r'^documents/(?P\d+)/send/link/$', name='document_send_link', view=MailDocumentLinkView.as_view() ), - url( - regex=r'^documents/multiple/send/link/$', - name='document_multiple_send_link', - view=MailDocumentLinkView.as_view() - ), url( regex=r'^documents/(?P\d+)/send/$', name='document_send', view=MailDocumentView.as_view() @@ -27,6 +22,11 @@ urlpatterns = [ regex=r'^documents/multiple/send/document/$', name='document_multiple_send', view=MailDocumentView.as_view() ), + url( + regex=r'^documents/multiple/send/link/$', + name='document_multiple_send_link', + view=MailDocumentLinkView.as_view() + ), url( regex=r'^system_mailer/log/$', name='system_mailer_error_log', view=SystemMailerLogEntryListView.as_view() diff --git a/mayan/apps/mailer/views.py b/mayan/apps/mailer/views.py index e32d5a810b..6ad40a274f 100644 --- a/mayan/apps/mailer/views.py +++ b/mayan/apps/mailer/views.py @@ -14,6 +14,7 @@ from mayan.apps.common.generics import ( SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView, SingleObjectListView ) +from mayan.apps.common.mixins import ExternalObjectMixin from mayan.apps.documents.models import Document from .classes import MailerBackend @@ -33,15 +34,6 @@ from .permissions import ( from .tasks import task_send_document -class SystemMailerLogEntryListView(SingleObjectListView): - extra_context = { - 'hide_object': True, - 'title': _('Document mailing error log'), - } - model = LogEntry - view_permission = permission_view_error_log - - class MailDocumentView(MultipleObjectFormActionView): as_attachment = True form_class = DocumentMailForm @@ -57,7 +49,7 @@ class MailDocumentView(MultipleObjectFormActionView): title_document = 'Email document: %s' def get_extra_context(self): - queryset = self.get_queryset() + queryset = self.get_object_list() result = { 'submit_icon_class': icon_mail_document_submit, @@ -116,6 +108,15 @@ class MailDocumentLinkView(MailDocumentView): title_document = 'Email link for document: %s' +class SystemMailerLogEntryListView(SingleObjectListView): + extra_context = { + 'hide_object': True, + 'title': _('Document mailing error log'), + } + model = LogEntry + view_permission = permission_view_error_log + + class UserMailerBackendSelectionView(FormView): extra_context = { 'title': _('New mailing profile backend selection'), @@ -177,7 +178,7 @@ class UserMailingDeleteView(SingleObjectDeleteView): def get_extra_context(self): return { - 'title': _('Delete mailing profile: %s') % self.get_object(), + 'title': _('Delete mailing profile: %s') % self.object } @@ -189,11 +190,11 @@ class UserMailingEditView(SingleObjectDynamicFormEditView): def get_extra_context(self): return { - 'title': _('Edit mailing profile: %s') % self.get_object(), + 'title': _('Edit mailing profile: %s') % self.object } def get_form_schema(self): - backend = self.get_object().get_backend() + backend = self.object.get_backend() result = { 'fields': backend.fields, 'widgets': getattr(backend, 'widgets', {}) @@ -248,16 +249,17 @@ class UserMailerListView(SingleObjectListView): return {'fields': self.get_backend().fields} -class UserMailerTestView(FormView): +class UserMailerTestView(ExternalObjectMixin, FormView): + external_object_class = UserMailer + external_object_permission = permission_user_mailer_use + external_object_pk_url_kwarg = 'mailer_id' form_class = UserMailerTestForm def form_valid(self, form): - obj = self.get_object() - # Separate getting the object from executing the test method to avoid # catching PermissionDenied exception. try: - obj.test(to=form.cleaned_data['email']) + self.external_object.test(to=form.cleaned_data['email']) except Exception as exception: messages.error( message=_( @@ -276,18 +278,7 @@ class UserMailerTestView(FormView): def get_extra_context(self): return { 'hide_object': True, - 'object': self.get_object(), + 'object': self.external_object, 'submit_label': _('Test'), - 'title': _('Test mailing profile: %s') % self.get_object(), + 'title': _('Test mailing profile: %s') % self.external_object, } - - def get_object(self): - return get_object_or_404( - klass=self.get_queryset(), pk=self.kwargs['mailer_id'] - ) - - def get_queryset(self): - return AccessControlList.objects.restrict_queryset( - permission=permission_user_mailer_use, - queryset=UserMailer.objects.all(), user=self.request.user - )