diff --git a/HISTORY.rst b/HISTORY.rst index fed7352068..e4fa62aef7 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,3 +1,8 @@ +2.7.3 (2017-09-XX) +================== +- Fix task manager queue list view. Thanks to LeVon Smoker for + the report. + 2.7.2 (2017-09-06) ================== - Fix new mailer creation view. GitLab issue #431. diff --git a/docs/releases/2.7.3.rst b/docs/releases/2.7.3.rst new file mode 100644 index 0000000000..fb5249ee1c --- /dev/null +++ b/docs/releases/2.7.3.rst @@ -0,0 +1,68 @@ +=============================== +Mayan EDMS v2.7.3 release notes +=============================== + +Released: September XX, 2017 + +What's new +========== + +- Fix task manager queue list view. Thanks to LeVon Smoker for + the report. + +Removals +-------- +* None + +Upgrading from a previous version +--------------------------------- + +Using PIP +~~~~~~~~~ + +Type in the console:: + + $ pip install -U mayan-edms + +the requirements will also be updated automatically. + +Using Git +~~~~~~~~~ + +If you installed Mayan EDMS by cloning the Git repository issue the commands:: + + $ git reset --hard HEAD + $ git pull + +otherwise download the compressed archived and uncompress it overriding the +existing installation. + +Next upgrade/add the new requirements:: + + $ pip install --upgrade -r requirements.txt + +Common steps +~~~~~~~~~~~~ + +Migrate existing database schema with:: + + $ mayan-edms.py performupgrade + +Add new static media:: + + $ mayan-edms.py collectstatic --noinput + +The upgrade procedure is now complete. + + +Backward incompatible changes +============================= + +* None + +Bugs fixed or issues closed +=========================== + +* `GitLab issue #431 `_ can't create new mailer + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/mayan/apps/task_manager/apps.py b/mayan/apps/task_manager/apps.py index 462b69ad5b..67c4aa55e0 100644 --- a/mayan/apps/task_manager/apps.py +++ b/mayan/apps/task_manager/apps.py @@ -19,6 +19,7 @@ from .links import ( class TaskManagerApp(MayanAppConfig): app_namespace = 'task_manager' app_url = 'task_manager' + has_tests = True name = 'task_manager' verbose_name = _('Task manager') diff --git a/mayan/apps/task_manager/tests/__init__.py b/mayan/apps/task_manager/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/task_manager/tests/literals.py b/mayan/apps/task_manager/tests/literals.py new file mode 100644 index 0000000000..b1656386c0 --- /dev/null +++ b/mayan/apps/task_manager/tests/literals.py @@ -0,0 +1,6 @@ +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +TEST_QUEUE_LABEL = _('Test queue') +TEST_QUEUE_NAME = 'test_queue' diff --git a/mayan/apps/task_manager/tests/test_views.py b/mayan/apps/task_manager/tests/test_views.py new file mode 100644 index 0000000000..4c1a796bdf --- /dev/null +++ b/mayan/apps/task_manager/tests/test_views.py @@ -0,0 +1,105 @@ +from __future__ import unicode_literals + +from common.tests.test_views import GenericViewTestCase + +from ..classes import CeleryQueue +from ..permissions import permission_task_view + +from .literals import TEST_QUEUE_LABEL, TEST_QUEUE_NAME + + +class TaskManagerViewTestCase(GenericViewTestCase): + def setUp(self): + super(TaskManagerViewTestCase, self).setUp() + self.test_queue = CeleryQueue( + label=TEST_QUEUE_LABEL, name=TEST_QUEUE_NAME + ) + + def _request_active_task_list(self): + return self.get( + viewname='task_manager:queue_active_task_list', + args=(self.test_queue.name,), follow=True + ) + + def _request_queue_list(self): + return self.get( + viewname='task_manager:queue_list', follow=True + ) + + def _request_reserved_task_list(self): + return self.get( + viewname='task_manager:queue_reserved_task_list', + args=(self.test_queue.name,), follow=True + ) + + def _request_scheduled_task_list(self): + return self.get( + viewname='task_manager:queue_scheduled_task_list', + args=(self.test_queue.name,), follow=True + ) + + def test_queue_list_view_no_permissions(self): + self.login_user() + + response = self._request_queue_list() + + self.assertEqual(response.status_code, 403) + + def test_queue_list_view_with_permissions(self): + self.login_user() + + self.grant_permission(permission=permission_task_view) + + response = self._request_queue_list() + + self.assertContains( + response, text=self.test_queue.name, status_code=200 + ) + + def test_active_task_list_view_no_permissions(self): + self.login_user() + + response = self._request_active_task_list() + + self.assertEqual(response.status_code, 403) + + def test_active_task_list_view_with_permissions(self): + self.login_user() + + self.grant_permission(permission=permission_task_view) + + response = self._request_active_task_list() + + self.assertEqual(response.status_code, 200) + + def test_reserved_task_list_view_no_permissions(self): + self.login_user() + + response = self._request_reserved_task_list() + + self.assertEqual(response.status_code, 403) + + def test_reserved_task_list_view_with_permissions(self): + self.login_user() + + self.grant_permission(permission=permission_task_view) + + response = self._request_reserved_task_list() + + self.assertEqual(response.status_code, 200) + + def test_scheduled_task_list_view_no_permissions(self): + self.login_user() + + response = self._request_scheduled_task_list() + + self.assertEqual(response.status_code, 403) + + def test_scheduled_task_list_view_with_permissions(self): + self.login_user() + + self.grant_permission(permission=permission_task_view) + + response = self._request_scheduled_task_list() + + self.assertEqual(response.status_code, 200) diff --git a/mayan/apps/task_manager/views.py b/mayan/apps/task_manager/views.py index 5c348ac593..7cbfd12ba0 100644 --- a/mayan/apps/task_manager/views.py +++ b/mayan/apps/task_manager/views.py @@ -16,7 +16,7 @@ class QueueListView(SingleObjectListView): } view_permission = permission_task_view - def get_queryset(self): + def get_object_list(self): return CeleryQueue.all() @@ -33,10 +33,7 @@ class QueueActiveTaskListView(SingleObjectListView): def get_object(self): return CeleryQueue.get(queue_name=self.kwargs['queue_name']) - def get_task_list(self): - return self.get_object().get_active_tasks() - - def get_queryset(self): + def get_object_list(self): try: return self.get_task_list() except Exception as exception: @@ -46,6 +43,9 @@ class QueueActiveTaskListView(SingleObjectListView): ) return () + def get_task_list(self): + return self.get_object().get_active_tasks() + class QueueScheduledTaskListView(QueueActiveTaskListView): def get_extra_context(self):