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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user