Improve duplicated document list view logic

Don't show documents with trashed duplicates.

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-10-30 20:01:16 -04:00
parent 58c64955cc
commit 6dda918bb3
3 changed files with 68 additions and 18 deletions

View File

@@ -28,6 +28,8 @@
- Fix MAYAN_GUNICORN_TIMEOUT Docker image setting. GitLab issue #671.
Thanks to Lennart Sauerbeck (@lennart_s) for the report.
- Add makefile target to launch a production staging Docker image.
- Improve duplicated document list view logic to not show
documents with trashed duplicates.
3.2.8 (2019-10-01)
==================

View File

@@ -147,7 +147,7 @@ class DuplicatedDocumentManager(models.Manager):
app_label='documents', model_name='Document'
)
return Document.objects.filter(
pk__in=self.filter(documents__isnull=False).values_list(
pk__in=self.filter(documents__in_trash=False).values_list(
'document_id', flat=True
)
)

View File

@@ -5,19 +5,68 @@ from ..permissions import permission_document_view
from .base import GenericDocumentViewTestCase
class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase):
def _upload_duplicate_document(self):
self.upload_document()
def _request_duplicated_document_list_view(self):
return self.get(viewname='documents:duplicated_document_list')
class DuplicatedDocumentsViewsTestMixin(object):
def _request_document_duplicates_list_view(self):
return self.get(
viewname='documents:document_duplicates_list',
kwargs={'pk': self.test_documents[0].pk}
)
def _request_duplicated_document_list_view(self):
return self.get(viewname='documents:duplicated_document_list')
def _upload_duplicate_document(self):
self.upload_document()
class DuplicatedDocumentsViewsTestCase(
DuplicatedDocumentsViewsTestMixin, GenericDocumentViewTestCase
):
def test_document_duplicates_list_no_permissions(self):
self._upload_duplicate_document()
response = self._request_document_duplicates_list_view()
self.assertEqual(response.status_code, 403)
def test_document_duplicates_list_with_access(self):
self._upload_duplicate_document()
self.grant_access(
obj=self.test_documents[0],
permission=permission_document_view
)
self.grant_access(
obj=self.test_documents[1],
permission=permission_document_view
)
response = self._request_document_duplicates_list_view()
self.assertContains(
response=response, text=self.test_documents[0].label,
status_code=200
)
def test_document_trashed_duplicates_list_with_full_access(self):
self._upload_duplicate_document()
self.grant_access(
obj=self.test_documents[0],
permission=permission_document_view
)
self.grant_access(
obj=self.test_documents[1],
permission=permission_document_view
)
self.test_documents[1].delete()
response = self._request_document_duplicates_list_view()
self.assertContains(
response=response, text=self.test_documents[0].pk,
status_code=200
)
self.assertNotContains(
response=response, text=self.test_documents[1].pk,
status_code=200
)
def test_duplicated_document_list_no_permissions(self):
self._upload_duplicate_document()
@@ -44,13 +93,7 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase):
status_code=200
)
def test_document_duplicates_list_no_permissions(self):
self._upload_duplicate_document()
response = self._request_document_duplicates_list_view()
self.assertEqual(response.status_code, 403)
def test_document_duplicates_list_with_access(self):
def test_duplicated_trashed_document_list_with_access(self):
self._upload_duplicate_document()
self.grant_access(
obj=self.test_documents[0],
@@ -60,9 +103,14 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase):
obj=self.test_documents[1],
permission=permission_document_view
)
self.test_documents[1].delete()
response = self._request_document_duplicates_list_view()
self.assertContains(
response=response, text=self.test_documents[0].label,
response = self._request_duplicated_document_list_view()
self.assertNotContains(
response=response, text=self.test_documents[0].pk,
status_code=200
)
self.assertNotContains(
response=response, text=self.test_documents[1].pk,
status_code=200
)