diff --git a/HISTORY.rst b/HISTORY.rst index f3c6035566..69011a459f 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -111,6 +111,7 @@ - Update label and icon of the document sign form Label updated from "Save" to "Sign". - Document signatures API views. +- Add and improve document signatures app tests. 3.2.9 (2019-11-03) ================== diff --git a/mayan/apps/document_signatures/tests/mixins.py b/mayan/apps/document_signatures/tests/mixins.py index 48b152a324..5284f2011c 100644 --- a/mayan/apps/document_signatures/tests/mixins.py +++ b/mayan/apps/document_signatures/tests/mixins.py @@ -64,6 +64,15 @@ class DetachedSignatureAPIViewTestMixin(object): class DetachedSignatureViewTestMixin(object): + def _request_test_document_version_signature_create_view(self): + return self.post( + viewname='signatures:document_version_signature_detached_create', + kwargs={'pk': self.test_document_version.pk}, data={ + 'key': self.test_key_private.pk, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + def _request_test_document_version_signature_download_view(self): return self.get( viewname='signatures:document_version_signature_download', @@ -112,6 +121,17 @@ class EmbeddedSignatureAPIViewTestMixin(object): ) +class EmbeddedSignatureViewTestMixin(object): + def _request_test_document_version_signature_create_view(self): + return self.post( + viewname='signatures:document_version_signature_embedded_create', + kwargs={'pk': self.test_document_version.pk}, data={ + 'key': self.test_key_private.pk, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + + class SignatureTestMixin(object): def _create_test_detached_signature(self): with open(TEST_SIGNATURE_FILE_PATH, mode='rb') as file_object: diff --git a/mayan/apps/document_signatures/tests/test_api.py b/mayan/apps/document_signatures/tests/test_api.py index aa36b08c51..14c439477d 100644 --- a/mayan/apps/document_signatures/tests/test_api.py +++ b/mayan/apps/document_signatures/tests/test_api.py @@ -139,7 +139,6 @@ class DetachedSignatureDocumentAPIViewTestCase( response.data['results'][0]['key_id'], TEST_KEY_PUBLIC_ID ) - ## def test_document_signature_detached_sign_view_with_no_permission(self): self.upload_document() self._create_test_key_private() diff --git a/mayan/apps/document_signatures/tests/test_views.py b/mayan/apps/document_signatures/tests/test_views.py index 1c3ee0d01b..1032e25ef3 100644 --- a/mayan/apps/document_signatures/tests/test_views.py +++ b/mayan/apps/document_signatures/tests/test_views.py @@ -2,12 +2,16 @@ from __future__ import absolute_import, unicode_literals from django_downloadview.test import assert_download_response +from mayan.apps.django_gpg.tests.mixins import KeyTestMixin +from mayan.apps.django_gpg.permissions import permission_key_sign from mayan.apps.documents.models import DocumentVersion from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from mayan.apps.documents.tests.literals import TEST_DOCUMENT_PATH from ..models import DetachedSignature, EmbeddedSignature from ..permissions import ( + permission_document_version_sign_detached, + permission_document_version_sign_embedded, permission_document_version_signature_delete, permission_document_version_signature_download, permission_document_version_signature_upload, @@ -17,8 +21,8 @@ from ..permissions import ( from .literals import TEST_SIGNED_DOCUMENT_PATH from .mixins import ( - DetachedSignatureViewTestMixin, SignatureTestMixin, - SignatureViewTestMixin + DetachedSignatureViewTestMixin, EmbeddedSignatureViewTestMixin, + SignatureTestMixin, SignatureViewTestMixin ) TEST_UNSIGNED_DOCUMENT_COUNT = 4 @@ -202,11 +206,86 @@ class SignaturesViewTestCase( class DetachedSignaturesViewTestCase( - SignatureTestMixin, DetachedSignatureViewTestMixin, + KeyTestMixin, SignatureTestMixin, DetachedSignatureViewTestMixin, GenericDocumentViewTestCase ): auto_upload_document = False + def test_detached_signature_create_view_with_no_permission(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_detached_signature_create_view_with_document_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_detached + ) + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 200) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_detached_signature_create_view_with_key_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_detached_signature_create_view_with_full_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_detached + ) + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + 1 + ) + def test_signature_download_view_no_permission(self): self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -258,3 +337,84 @@ class DetachedSignaturesViewTestCase( self.assertEqual(response.status_code, 302) self.assertEqual(DetachedSignature.objects.count(), 1) + + +class EmbeddedSignaturesViewTestCase( + KeyTestMixin, EmbeddedSignatureViewTestMixin, GenericDocumentViewTestCase +): + auto_upload_document = False + + def test_embedded_signature_create_view_with_no_permission(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_embedded_signature_create_view_with_document_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_embedded + ) + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 200) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_embedded_signature_create_view_with_key_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_embedded_signature_create_view_with_full_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_embedded + ) + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + 1 + )