Refactor metadata app

Update permission variable name from
"permission_document_metadata_" to "permission_metadata_".

Fix failing tests.

Add test for same metadata type mixin.

Split metadata add and remove test into test for GET and
POST requests.

Remove use of urlencode and instead use furl.

Simplify view using self.action_count and
self.action_id_list.

Use ExternalObjectMixin to remove repeated code.

Move the repeated code to test for all documents to
be of the same type into its own mixin.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-02-03 23:37:52 -04:00
parent dcea32ae38
commit aa95a61451
8 changed files with 266 additions and 309 deletions
+9 -9
View File
@@ -11,8 +11,8 @@ from mayan.apps.rest_api.tests import BaseAPITestCase
from ..models import DocumentTypeMetadataType, MetadataType
from ..permissions import (
permission_document_metadata_add, permission_document_metadata_edit,
permission_document_metadata_remove, permission_document_metadata_view,
permission_metadata_add, permission_metadata_edit,
permission_metadata_remove, permission_metadata_view,
permission_metadata_type_create, permission_metadata_type_delete,
permission_metadata_type_edit, permission_metadata_type_view
)
@@ -377,7 +377,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase):
self.assertEqual(self.document.metadata.count(), 0)
def test_document_metadata_create_view_with_access(self):
self.grant_access(permission=permission_document_metadata_add, obj=self.document)
self.grant_access(permission=permission_metadata_add, obj=self.document)
response = self._request_document_metadata_create_view()
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
document_metadata = self.document.metadata.first()
@@ -387,7 +387,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase):
def test_document_metadata_create_duplicate_view(self):
self._create_document_metadata()
self.grant_permission(permission=permission_document_metadata_add)
self.grant_permission(permission=permission_metadata_add)
response = self._request_document_metadata_create_view()
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(list(response.data.keys())[0], 'non_field_errors')
@@ -395,7 +395,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase):
def test_document_metadata_create_invalid_lookup_value_view(self):
self.metadata_type.lookup = 'invalid,lookup,values,on,purpose'
self.metadata_type.save()
self.grant_permission(permission=permission_document_metadata_add)
self.grant_permission(permission=permission_metadata_add)
response = self._request_document_metadata_create_view()
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(list(response.data.keys())[0], 'non_field_errors')
@@ -418,7 +418,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase):
def test_document_metadata_delete_view_with_access(self):
self._create_document_metadata()
self.grant_access(
permission=permission_document_metadata_remove, obj=self.document
permission=permission_metadata_remove, obj=self.document
)
response = self._request_document_metadata_delete_view()
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
@@ -438,7 +438,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase):
def test_document_metadata_list_view_with_access(self):
self._create_document_metadata()
self.grant_access(
permission=permission_document_metadata_view, obj=self.document
permission=permission_metadata_view, obj=self.document
)
response = self._request_document_metadata_list_view()
self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -477,7 +477,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase):
def test_document_metadata_patch_view_with_access(self):
self._create_document_metadata()
self.grant_access(
permission=permission_document_metadata_edit, obj=self.document
permission=permission_metadata_edit, obj=self.document
)
response = self._request_document_metadata_edit_view_via_patch()
self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -510,7 +510,7 @@ class DocumentMetadataAPITestCase(BaseAPITestCase):
def test_document_metadata_put_view_with_access(self):
self._create_document_metadata()
self.grant_access(
permission=permission_document_metadata_edit, obj=self.document
permission=permission_metadata_edit, obj=self.document
)
response = self._request_document_metadata_edit_view_via_put()
self.assertEqual(response.status_code, status.HTTP_200_OK)
+2 -2
View File
@@ -38,7 +38,7 @@ class MetadataTypeEventsTestCase(MetadataTestsMixin, GenericDocumentViewTestCase
self.assertEqual(event.verb, event_metadata_type_created.id)
self.assertEqual(event.target, metadata_type)
self.assertEqual(event.actor, self.user)
self.assertEqual(event.actor, self._test_case_user)
def test_metadata_type_edit_event_no_permissions(self):
self._create_metadata_type()
@@ -66,4 +66,4 @@ class MetadataTypeEventsTestCase(MetadataTestsMixin, GenericDocumentViewTestCase
self.assertEqual(event.verb, event_metadata_type_edited.id)
self.assertEqual(event.target, self.metadata_type)
self.assertEqual(event.actor, self.user)
self.assertEqual(event.actor, self._test_case_user)
+129 -65
View File
@@ -2,6 +2,8 @@ from __future__ import unicode_literals
import logging
from django.utils.encoding import force_text
from mayan.apps.common.tests import GenericViewTestCase
from mayan.apps.documents.models import DocumentType
from mayan.apps.documents.permissions import (
@@ -13,8 +15,8 @@ from mayan.apps.documents.tests import (
from ..models import MetadataType
from ..permissions import (
permission_document_metadata_add, permission_document_metadata_remove,
permission_document_metadata_edit, permission_metadata_type_create,
permission_metadata_add, permission_metadata_remove,
permission_metadata_edit, permission_metadata_type_create,
permission_metadata_type_delete, permission_metadata_type_edit,
permission_metadata_type_view
)
@@ -28,51 +30,114 @@ from .literals import (
from .mixins import MetadataTestsMixin
class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
class DocumentMetadataViewTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
def setUp(self):
super(DocumentMetadataTestCase, self).setUp()
self.login_user()
super(DocumentMetadataViewTestCase, self).setUp()
self._create_metadata_type()
self.document_type.metadata.create(metadata_type=self.metadata_type)
def _request_get_document_metadata_add_view(self):
def _request_document_metadata_add_get_view(self):
return self.get(
viewname='metadata:document_metadata_add',
kwargs={'document_id': self.document.pk},
kwargs={'document_id': self.test_document.pk},
)
def _request_post_document_metadata_add_view(self):
def _request_document_multiple_metadata_add_get_view(self):
return self.get(
viewname='metadata:document_multiple_metadata_add',
data={'id_list': ','.join([force_text(pk) for pk in self.id_list])},
)
def _request_document_metadata_add_post_view(self):
return self.post(
viewname='metadata:document_metadata_add',
kwargs={'document_id': self.document.pk},
kwargs={'document_id': self.test_document.pk},
data={'metadata_type': self.metadata_type.pk}
)
def test_document_metadata_add_view_no_permission(self):
response = self._request_get_document_metadata_add_view()
def test_document_metadata_add_get_view_no_permission(self):
response = self._request_document_metadata_add_get_view()
self.assertNotContains(
response, text=self.metadata_type.label, status_code=200
response, text=self.metadata_type.label, status_code=404
)
response = self._request_post_document_metadata_add_view()
self.assertEqual(response.status_code, 200)
self.assertEqual(len(self.document.metadata.all()), 0)
def test_document_metadata_add_view_with_document_access(self):
def test_document_metadata_add_get_view_with_full_access(self):
self.grant_access(
permission=permission_document_metadata_add, obj=self.document
obj=self.test_document, permission=permission_metadata_add
)
response = self._request_get_document_metadata_add_view()
response = self._request_document_metadata_add_get_view()
self.assertContains(
response, text=self.metadata_type.label, status_code=200
)
response = self._request_post_document_metadata_add_view()
def test_document_individual_metadata_same_type_mixin_with_access(self):
self.grant_access(
obj=self.test_document, permission=permission_metadata_add
)
self._create_document_type_random()
self.test_document_type.metadata.create(metadata_type=self.metadata_type)
self._create_document()
self.grant_access(
obj=self.test_document, permission=permission_metadata_add
)
response = self._request_document_metadata_add_get_view()
self.assertContains(
response, text=self.metadata_type.label, status_code=200
)
def test_document_single_metadata_same_type_mixin_with_access(self):
self.id_list = [self.test_document.pk]
self.grant_access(
obj=self.test_document, permission=permission_metadata_add
)
self._create_document_type_random()
self.test_document_type.metadata.create(metadata_type=self.metadata_type)
self._create_document()
self.grant_access(
obj=self.test_document, permission=permission_metadata_add
)
response = self._request_document_multiple_metadata_add_get_view()
self.assertContains(
response, text=self.metadata_type.label, status_code=200
)
def test_document_multiple_metadata_same_type_mixin_with_access(self):
self.id_list = [self.test_document.pk]
self.grant_access(
obj=self.test_document, permission=permission_metadata_add
)
self._create_document_type_random()
self.test_document_type.metadata.create(metadata_type=self.metadata_type)
self._create_document()
self.id_list.append(self.test_document.pk)
self.grant_access(
obj=self.test_document, permission=permission_metadata_add
)
response = self._request_document_multiple_metadata_add_get_view()
self.assertNotContains(
response, text=self.metadata_type.label, status_code=302
)
def test_document_metadata_add_post_view_no_permission(self):
response = self._request_document_metadata_add_post_view()
self.assertEqual(response.status_code, 404)
self.assertEqual(len(self.document.metadata.all()), 0)
def test_document_metadata_add_post_view_with_full_access(self):
self.grant_access(
obj=self.test_document, permission=permission_metadata_add
)
response = self._request_document_metadata_add_post_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(self.document.metadata.all()), 1)
self.assertQuerysetEqual(
qs=self.document.metadata.values('metadata_type',),
values=[
@@ -86,13 +151,6 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
# Gitlab issue #204
# Problems to add required metadata after changing the document type
self.grant_access(
permission=permission_document_properties_edit, obj=self.document
)
self.grant_access(
permission=permission_document_metadata_edit, obj=self.document
)
document_type_2 = DocumentType.objects.create(
label=TEST_DOCUMENT_TYPE_2_LABEL
)
@@ -105,6 +163,12 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
metadata_type=metadata_type_2, required=True
)
self.grant_access(
obj=self.document, permission=permission_document_properties_edit
)
self.grant_access(
obj=self.document, permission=permission_metadata_edit
)
self.document.set_document_type(document_type=document_type_2)
response = self.get(
@@ -133,13 +197,13 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
TEST_DOCUMENT_METADATA_VALUE_2
)
def _request_get_document_document_metadata_remove_view(self):
def _request_document_document_metadata_remove_get_view(self):
return self.get(
viewname='metadata:document_metadata_remove',
kwargs={'document_id': self.document.pk}
)
def _request_post_document_document_metadata_remove_view(self):
def _request_document_document_metadata_remove_post_view(self):
return self.post(
viewname='metadata:document_metadata_remove',
kwargs={'document_id': self.document.pk}, data={
@@ -151,38 +215,24 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
}
)
def test_document_metadata_remove_view_no_permission(self):
def test_document_metadata_remove_get_view_no_permission(self):
self.document_metadata = self.document.metadata.create(
metadata_type=self.metadata_type, value=''
)
response = self._request_get_document_document_metadata_remove_view()
response = self._request_document_document_metadata_remove_get_view()
self.assertNotContains(
response, text=self.metadata_type.label, status_code=200
response=response, text=self.metadata_type.label, status_code=404
)
response = self._request_post_document_document_metadata_remove_view()
self.assertEqual(response.status_code, 404)
self.assertEqual(len(self.document.metadata.all()), 1)
self.assertQuerysetEqual(
qs=self.document.metadata.values('metadata_type',),
values=[
{
'metadata_type': self.metadata_type.pk,
}
], transform=dict
)
def test_document_metadata_remove_view_with_document_access(self):
def test_document_metadata_remove_get_view_with_full_access(self):
self.document_metadata = self.document.metadata.create(
metadata_type=self.metadata_type, value=''
)
self.grant_access(
permission=permission_document_metadata_remove, obj=self.document
obj=self.document, permission=permission_metadata_remove,
)
# Silence unrelated logging
@@ -190,14 +240,32 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
level=logging.CRITICAL
)
response = self._request_get_document_document_metadata_remove_view()
response = self._request_document_document_metadata_remove_get_view()
self.assertContains(
response, text=self.metadata_type.label, status_code=200
)
response = self._request_post_document_document_metadata_remove_view()
def test_document_metadata_remove_post_view_no_permission(self):
self.document_metadata = self.document.metadata.create(
metadata_type=self.metadata_type, value=''
)
response = self._request_document_document_metadata_remove_get_view()
self.assertNotContains(
response=response, text=self.metadata_type.label, status_code=404
)
self.assertEqual(len(self.document.metadata.all()), 1)
def test_document_metadata_remove_post_view_with_access(self):
self.document_metadata = self.document.metadata.create(
metadata_type=self.metadata_type, value=''
)
self.grant_access(
obj=self.test_document, permission=permission_metadata_remove
)
response = self._request_document_document_metadata_remove_post_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(len(self.document.metadata.all()), 0)
@@ -227,10 +295,10 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
self.document_2 = self.upload_document()
self.grant_access(
permission=permission_document_metadata_edit, obj=self.document
permission=permission_metadata_edit, obj=self.document
)
self.grant_access(
permission=permission_document_metadata_edit, obj=self.document_2
permission=permission_metadata_edit, obj=self.document_2
)
self.document_metadata = self.document.metadata.create(
@@ -277,10 +345,10 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
def test_document_multiple_metadata_remove_with_access(self):
self.document_2 = self.upload_document()
self.grant_access(
permission=permission_document_metadata_remove, obj=self.document
permission=permission_metadata_remove, obj=self.document
)
self.grant_access(
permission=permission_document_metadata_remove, obj=self.document_2
permission=permission_metadata_remove, obj=self.document_2
)
self.document_metadata = self.document.metadata.create(
@@ -311,10 +379,10 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
self.document_2 = self.upload_document()
self.grant_access(
permission=permission_document_metadata_add, obj=self.document
permission=permission_metadata_add, obj=self.document
)
self.grant_access(
permission=permission_document_metadata_add, obj=self.document_2
permission=permission_metadata_add, obj=self.document_2
)
response = self._request_post_document_document_metadata_add_view()
@@ -326,7 +394,7 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
def test_single_document_multiple_metadata_add_view_with_access(self):
self.grant_access(
permission=permission_document_metadata_add, obj=self.document
permission=permission_metadata_add, obj=self.document
)
metadata_type_2 = MetadataType.objects.create(
name=TEST_METADATA_TYPE_NAME_2, label=TEST_METADATA_TYPE_LABEL_2
@@ -351,14 +419,10 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
)
class MetadataTypeViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericViewTestCase):
class MetadataTypeViewViewTestCase(DocumentTestMixin, MetadataTestsMixin, GenericViewTestCase):
auto_create_document_type = False
auto_upload_document = False
def setUp(self):
super(MetadataTypeViewTestCase, self).setUp()
self.login_user()
def test_metadata_type_create_view_no_permission(self):
response = self._request_metadata_type_create_view()