From f0755a4cd9ca824a7d70a07303bd880994f55bf4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 11 Nov 2019 19:15:44 -0400 Subject: [PATCH] Backport tests improvements - Test mixin improvements for django_gpg - Detached and embedded signatures and signing tests for the document signatures app. - Improved mixins in both. Signed-off-by: Roberto Rosario --- mayan/apps/django_gpg/tests/literals.py | 8 +-- mayan/apps/django_gpg/tests/mixins.py | 47 +++++++++++- mayan/apps/django_gpg/tests/test_api.py | 41 +++-------- mayan/apps/django_gpg/tests/test_models.py | 42 +++++------ mayan/apps/django_gpg/tests/test_views.py | 28 +++----- .../document_signatures/tests/literals.py | 4 +- .../apps/document_signatures/tests/mixins.py | 70 ++++++++++++++++-- .../document_signatures/tests/test_links.py | 6 +- .../document_signatures/tests/test_models.py | 52 +++++++------- .../document_signatures/tests/test_views.py | 71 ++++++------------- mayan/apps/documents/tests/mixins.py | 2 + 11 files changed, 208 insertions(+), 163 deletions(-) diff --git a/mayan/apps/django_gpg/tests/literals.py b/mayan/apps/django_gpg/tests/literals.py index c7dca32a6a..55782e1872 100644 --- a/mayan/apps/django_gpg/tests/literals.py +++ b/mayan/apps/django_gpg/tests/literals.py @@ -26,7 +26,7 @@ TEST_FILE = os.path.join( 'test_files', 'test_file.txt' ) -TEST_KEY_DATA = '''-----BEGIN PGP PRIVATE KEY BLOCK----- +TEST_KEY_PRIVATE_DATA = '''-----BEGIN PGP PRIVATE KEY BLOCK----- Version: GnuPG v1 lQO+BFbxfC8BCACnUZoD96W4+CSIaU9G8I08kXu2zJLzy2XgUtwLx8VQ8dOHr0E/ @@ -86,9 +86,9 @@ h4oCbUV5JHhOyB+89Y1w8haFU9LrgOER2kXff1xU6wMfLdcO5ApV/sRJcNdYL7Cg =JZ5G -----END PGP PRIVATE KEY BLOCK-----''' -TEST_KEY_ID = '4125E9C571F378AC' -TEST_KEY_FINGERPRINT = '6A24574E0A35004CDDFD22704125E9C571F378AC' -TEST_KEY_PASSPHRASE = 'testpassphrase' +TEST_KEY_PRIVATE_ID = '4125E9C571F378AC' +TEST_KEY_PRIVATE_FINGERPRINT = '6A24574E0A35004CDDFD22704125E9C571F378AC' +TEST_KEY_PRIVATE_PASSPHRASE = 'testpassphrase' TEST_KEYSERVERS = ['pool.sks-keyservers.net'] diff --git a/mayan/apps/django_gpg/tests/mixins.py b/mayan/apps/django_gpg/tests/mixins.py index 82bf007147..edf32185af 100644 --- a/mayan/apps/django_gpg/tests/mixins.py +++ b/mayan/apps/django_gpg/tests/mixins.py @@ -2,9 +2,50 @@ from __future__ import unicode_literals from ..models import Key -from .literals import TEST_KEY_DATA +from .literals import TEST_KEY_PRIVATE_DATA + + +class KeyAPIViewTestMixin(object): + def _request_test_key_create_view(self): + return self.post( + viewname='rest_api:key-list', data={ + 'key_data': TEST_KEY_PRIVATE_DATA + } + ) + + def _request_test_key_delete_view(self): + return self.delete( + viewname='rest_api:key-detail', kwargs={ + 'pk': self.test_key_private.pk + } + ) + + def _request_test_key_detail_view(self): + return self.get( + viewname='rest_api:key-detail', kwargs={ + 'pk': self.test_key_private.pk + } + ) class KeyTestMixin(object): - def _create_test_key(self): - self.test_key = Key.objects.create(key_data=TEST_KEY_DATA) + def _create_test_key_private(self): + self.test_key_private = Key.objects.create( + key_data=TEST_KEY_PRIVATE_DATA + ) + + +class KeyViewTestMixin(object): + def _request_test_key_download_view(self): + return self.get( + viewname='django_gpg:key_download', kwargs={ + 'pk': self.test_key_private.pk + } + ) + + def _request_test_key_upload_view(self): + return self.post( + viewname='django_gpg:key_upload', data={ + 'key_data': TEST_KEY_PRIVATE_DATA + } + ) diff --git a/mayan/apps/django_gpg/tests/test_api.py b/mayan/apps/django_gpg/tests/test_api.py index 1f976e1107..6ece51be0b 100644 --- a/mayan/apps/django_gpg/tests/test_api.py +++ b/mayan/apps/django_gpg/tests/test_api.py @@ -9,27 +9,8 @@ from ..permissions import ( permission_key_delete, permission_key_upload, permission_key_view ) -from .literals import TEST_KEY_DATA, TEST_KEY_FINGERPRINT -from .mixins import KeyTestMixin - - -class KeyAPIViewTestMixin(object): - def _request_test_key_create_view(self): - return self.post( - viewname='rest_api:key-list', data={ - 'key_data': TEST_KEY_DATA - } - ) - - def _request_test_key_delete_view(self): - return self.delete( - viewname='rest_api:key-detail', kwargs={'pk': self.test_key.pk} - ) - - def _request_test_key_detail_view(self): - return self.get( - viewname='rest_api:key-detail', kwargs={'pk': self.test_key.pk} - ) +from .literals import TEST_KEY_PRIVATE_FINGERPRINT +from .mixins import KeyAPIViewTestMixin, KeyTestMixin class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): @@ -44,14 +25,14 @@ class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): response = self._request_test_key_create_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(response.data['fingerprint'], TEST_KEY_FINGERPRINT) + self.assertEqual(response.data['fingerprint'], TEST_KEY_PRIVATE_FINGERPRINT) key = Key.objects.first() self.assertEqual(Key.objects.count(), 1) - self.assertEqual(key.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(key.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_key_delete_view_no_access(self): - self._create_test_key() + self._create_test_key_private() response = self._request_test_key_delete_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) @@ -59,9 +40,9 @@ class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): self.assertEqual(Key.objects.count(), 1) def test_key_delete_view_with_access(self): - self._create_test_key() + self._create_test_key_private() self.grant_access( - obj=self.test_key, permission=permission_key_delete + obj=self.test_key_private, permission=permission_key_delete ) response = self._request_test_key_delete_view() @@ -70,19 +51,19 @@ class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): self.assertEqual(Key.objects.count(), 0) def test_key_detail_view_no_access(self): - self._create_test_key() + self._create_test_key_private() response = self._request_test_key_detail_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_key_detail_view_with_access(self): - self._create_test_key() + self._create_test_key_private() self.grant_access( - obj=self.test_key, permission=permission_key_view + obj=self.test_key_private, permission=permission_key_view ) response = self._request_test_key_detail_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( - response.data['fingerprint'], self.test_key.fingerprint + response.data['fingerprint'], self.test_key_private.fingerprint ) diff --git a/mayan/apps/django_gpg/tests/test_models.py b/mayan/apps/django_gpg/tests/test_models.py index fe02e338b2..624fe1358a 100644 --- a/mayan/apps/django_gpg/tests/test_models.py +++ b/mayan/apps/django_gpg/tests/test_models.py @@ -18,9 +18,9 @@ from ..models import Key from .literals import ( MOCK_SEARCH_KEYS_RESPONSE, TEST_DETACHED_SIGNATURE, TEST_FILE, - TEST_KEY_DATA, TEST_KEY_FINGERPRINT, TEST_KEY_PASSPHRASE, - TEST_SEARCH_FINGERPRINT, TEST_SEARCH_UID, TEST_SIGNED_FILE, - TEST_SIGNED_FILE_CONTENT + TEST_KEY_PRIVATE_DATA, TEST_KEY_PRIVATE_FINGERPRINT, + TEST_KEY_PRIVATE_PASSPHRASE, TEST_SEARCH_FINGERPRINT, TEST_SEARCH_UID, + TEST_SIGNED_FILE, TEST_SIGNED_FILE_CONTENT ) from .mocks import mock_recv_keys @@ -28,9 +28,9 @@ from .mocks import mock_recv_keys class KeyTestCase(BaseTestCase): def test_key_instance_creation(self): # Creating a Key instance is analogous to importing a key - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) - self.assertEqual(key.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(key.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) @mock.patch.object(gnupg.GPG, 'search_keys', autospec=True) def test_key_search(self, search_keys): @@ -69,36 +69,36 @@ class KeyTestCase(BaseTestCase): with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.verify_file(signed_file) - self.assertTrue(result.key_id in TEST_KEY_FINGERPRINT) + self.assertTrue(result.key_id in TEST_KEY_PRIVATE_FINGERPRINT) def test_embedded_verification_with_key(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.verify_file(signed_file) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_embedded_verification_with_correct_fingerprint(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.verify_file( - signed_file, key_fingerprint=TEST_KEY_FINGERPRINT + signed_file, key_fingerprint=TEST_KEY_PRIVATE_FINGERPRINT ) self.assertTrue(result.valid) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_embedded_verification_with_incorrect_fingerprint(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: with self.assertRaises(KeyDoesNotExist): Key.objects.verify_file(signed_file, key_fingerprint='999') def test_signed_file_decryption(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.decrypt_file(file_object=signed_file) @@ -122,10 +122,10 @@ class KeyTestCase(BaseTestCase): file_object=test_file, signature_file=signature_file ) - self.assertTrue(result.key_id in TEST_KEY_FINGERPRINT) + self.assertTrue(result.key_id in TEST_KEY_PRIVATE_FINGERPRINT) def test_detached_verification_with_key(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_DETACHED_SIGNATURE, mode='rb') as signature_file: with open(TEST_FILE, mode='rb') as test_file: @@ -134,10 +134,10 @@ class KeyTestCase(BaseTestCase): ) self.assertTrue(result) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_detached_signing_no_passphrase(self): - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with self.assertRaises(NeedPassphrase): with open(TEST_FILE, mode='rb') as test_file: @@ -146,7 +146,7 @@ class KeyTestCase(BaseTestCase): ) def test_detached_signing_bad_passphrase(self): - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with self.assertRaises(PassphraseError): with open(TEST_FILE, mode='rb') as test_file: @@ -156,12 +156,12 @@ class KeyTestCase(BaseTestCase): ) def test_detached_signing_with_passphrase(self): - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_FILE, mode='rb') as test_file: detached_signature = key.sign_file( file_object=test_file, detached=True, - passphrase=TEST_KEY_PASSPHRASE + passphrase=TEST_KEY_PRIVATE_PASSPHRASE ) signature_file = io.BytesIO() @@ -175,4 +175,4 @@ class KeyTestCase(BaseTestCase): signature_file.close() self.assertTrue(result) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) diff --git a/mayan/apps/django_gpg/tests/test_views.py b/mayan/apps/django_gpg/tests/test_views.py index 7c2c7f2754..64c9fc482f 100644 --- a/mayan/apps/django_gpg/tests/test_views.py +++ b/mayan/apps/django_gpg/tests/test_views.py @@ -7,25 +7,13 @@ from mayan.apps.common.tests import GenericViewTestCase from ..models import Key from ..permissions import permission_key_download, permission_key_upload -from .literals import TEST_KEY_DATA, TEST_KEY_FINGERPRINT -from .mixins import KeyTestMixin - - -class KeyViewTestMixin(object): - def _request_test_key_download_view(self): - return self.get( - viewname='django_gpg:key_download', kwargs={'pk': self.test_key.pk} - ) - - def _request_test_key_upload_view(self): - return self.post( - viewname='django_gpg:key_upload', data={'key_data': TEST_KEY_DATA} - ) +from .literals import TEST_KEY_PRIVATE_FINGERPRINT +from .mixins import KeyTestMixin, KeyViewTestMixin class KeyViewTestCase(KeyTestMixin, KeyViewTestMixin, GenericViewTestCase): def test_key_download_view_no_permission(self): - self._create_test_key() + self._create_test_key_private() response = self._request_test_key_download_view() self.assertEqual(response.status_code, 403) @@ -33,16 +21,16 @@ class KeyViewTestCase(KeyTestMixin, KeyViewTestMixin, GenericViewTestCase): def test_key_download_view_with_permission(self): self.expected_content_types = ('application/octet-stream; charset=utf-8',) - self._create_test_key() + self._create_test_key_private() self.grant_access( - obj=self.test_key, permission=permission_key_download + obj=self.test_key_private, permission=permission_key_download ) response = self._request_test_key_download_view() assert_download_response( - self, response=response, content=self.test_key.key_data, - basename=self.test_key.key_id, + self, response=response, content=self.test_key_private.key_data, + basename=self.test_key_private.key_id, ) def test_key_upload_view_no_permission(self): @@ -59,5 +47,5 @@ class KeyViewTestCase(KeyTestMixin, KeyViewTestMixin, GenericViewTestCase): self.assertEqual(Key.objects.count(), 1) self.assertEqual( - Key.objects.first().fingerprint, TEST_KEY_FINGERPRINT + Key.objects.first().fingerprint, TEST_KEY_PRIVATE_FINGERPRINT ) diff --git a/mayan/apps/document_signatures/tests/literals.py b/mayan/apps/document_signatures/tests/literals.py index 040366be1e..49aebf355a 100644 --- a/mayan/apps/document_signatures/tests/literals.py +++ b/mayan/apps/document_signatures/tests/literals.py @@ -12,9 +12,9 @@ TEST_SIGNATURE_FILE_PATH = os.path.join( settings.BASE_DIR, 'apps', 'document_signatures', 'tests', 'contrib', 'sample_documents', 'mayan_11_1.pdf.sig' ) -TEST_KEY_FILE = os.path.join( +TEST_KEY_FILE_PATH = os.path.join( settings.BASE_DIR, 'apps', 'document_signatures', 'tests', 'contrib', 'sample_documents', 'key0x5F3F7F75D210724D.asc' ) -TEST_KEY_ID = '5F3F7F75D210724D' +TEST_KEY_PUBLIC_ID = '5F3F7F75D210724D' TEST_SIGNATURE_ID = 'XVkoGKw35yU1iq11dZPiv7uAY7k' diff --git a/mayan/apps/document_signatures/tests/mixins.py b/mayan/apps/document_signatures/tests/mixins.py index aafafa93f8..6d352abdfb 100644 --- a/mayan/apps/document_signatures/tests/mixins.py +++ b/mayan/apps/document_signatures/tests/mixins.py @@ -3,13 +3,50 @@ from __future__ import absolute_import, unicode_literals from django.core.files import File from mayan.apps.django_gpg.models import Key +from mayan.apps.django_gpg.tests.literals import TEST_KEY_PRIVATE_PASSPHRASE from ..models import DetachedSignature -from .literals import TEST_KEY_FILE, TEST_SIGNATURE_FILE_PATH +from .literals import TEST_KEY_FILE_PATH, TEST_SIGNATURE_FILE_PATH -class SignaturesTestMixin(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', + kwargs={'pk': self.test_signature.pk} + ) + + def _request_test_document_version_signature_upload_view(self): + with open(TEST_SIGNATURE_FILE_PATH, mode='rb') as file_object: + return self.post( + viewname='signatures:document_version_signature_upload', + kwargs={'pk': self.test_document.latest_version.pk}, + data={'signature_file': file_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: self.test_signature = DetachedSignature.objects.create( @@ -17,6 +54,31 @@ class SignaturesTestMixin(object): signature_file=File(file_object) ) - def _create_test_key(self): - with open(TEST_KEY_FILE, mode='rb') as file_object: + def _create_test_key_private(self): + with open(TEST_KEY_FILE_PATH, mode='rb') as file_object: self.test_key = Key.objects.create(key_data=file_object.read()) + + +class SignatureViewTestMixin(object): + def _request_test_document_version_signature_delete_view(self): + return self.post( + viewname='signatures:document_version_signature_delete', + kwargs={'pk': self.test_signature.pk} + ) + + def _request_test_document_version_signature_details_view(self): + return self.get( + viewname='signatures:document_version_signature_details', + kwargs={'pk': self.test_signature.pk} + ) + + def _request_test_document_version_signature_list_view(self, document): + return self.get( + viewname='signatures:document_version_signature_list', + kwargs={'pk': self.test_document.latest_version.pk} + ) + + def _request_all_test_document_version_signature_verify_view(self): + return self.post( + viewname='signatures:all_document_version_signature_verify' + ) diff --git a/mayan/apps/document_signatures/tests/test_links.py b/mayan/apps/document_signatures/tests/test_links.py index 5f2b4678c3..ef37d7078d 100644 --- a/mayan/apps/document_signatures/tests/test_links.py +++ b/mayan/apps/document_signatures/tests/test_links.py @@ -15,10 +15,12 @@ from ..permissions import ( permission_document_version_signature_view ) from .literals import TEST_SIGNED_DOCUMENT_PATH -from .mixins import SignaturesTestMixin +from .mixins import SignatureTestMixin -class DocumentSignatureLinksTestCase(SignaturesTestMixin, GenericDocumentViewTestCase): +class DocumentSignatureLinksTestCase( + SignatureTestMixin, GenericDocumentViewTestCase +): def test_document_version_signature_detail_link_no_permission(self): self.test_document_path = TEST_SIGNED_DOCUMENT_PATH self.upload_document() diff --git a/mayan/apps/document_signatures/tests/test_models.py b/mayan/apps/document_signatures/tests/test_models.py index 957b87a159..1bbec89de2 100644 --- a/mayan/apps/document_signatures/tests/test_models.py +++ b/mayan/apps/document_signatures/tests/test_models.py @@ -3,10 +3,8 @@ from __future__ import unicode_literals import hashlib import time -from mayan.apps.django_gpg.models import Key -from mayan.apps.django_gpg.tests.literals import ( - TEST_KEY_DATA, TEST_KEY_PASSPHRASE -) +from mayan.apps.django_gpg.tests.literals import TEST_KEY_PRIVATE_PASSPHRASE +from mayan.apps.django_gpg.tests.mixins import KeyTestMixin from mayan.apps.documents.models import DocumentVersion from mayan.apps.documents.tests import ( GenericDocumentTestCase, TEST_DOCUMENT_PATH @@ -15,11 +13,13 @@ from mayan.apps.documents.tests import ( from ..models import DetachedSignature, EmbeddedSignature from ..tasks import task_verify_missing_embedded_signature -from .literals import TEST_SIGNED_DOCUMENT_PATH, TEST_KEY_ID, TEST_SIGNATURE_ID -from .mixins import SignaturesTestMixin +from .literals import ( + TEST_SIGNED_DOCUMENT_PATH, TEST_KEY_PUBLIC_ID, TEST_SIGNATURE_ID +) +from .mixins import SignatureTestMixin -class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): +class DocumentSignaturesTestCase(SignatureTestMixin, GenericDocumentTestCase): auto_upload_document = False def test_embedded_signature_no_key(self): @@ -32,7 +32,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(signature.signature_id, None) def test_embedded_signature_post_key_verify(self): @@ -45,17 +45,17 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(signature.signature_id, None) - self._create_test_key() + self._create_test_key_private() signature = EmbeddedSignature.objects.first() self.assertEqual(signature.signature_id, TEST_SIGNATURE_ID) def test_embedded_signature_post_no_key_verify(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_SIGNED_DOCUMENT_PATH self.upload_document() @@ -66,7 +66,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(signature.signature_id, TEST_SIGNATURE_ID) self.test_key.delete() @@ -76,7 +76,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual(signature.signature_id, None) def test_embedded_signature_with_key(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_SIGNED_DOCUMENT_PATH self.upload_document() @@ -88,7 +88,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual( signature.public_key_fingerprint, self.test_key.fingerprint ) @@ -105,11 +105,11 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( self.test_signature.document_version, self.test_document.latest_version ) - self.assertEqual(self.test_signature.key_id, TEST_KEY_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(self.test_signature.public_key_fingerprint, None) def test_detached_signature_with_key(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -120,7 +120,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( self.test_signature.document_version, self.test_document.latest_version ) - self.assertEqual(self.test_signature.key_id, TEST_KEY_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual( self.test_signature.public_key_fingerprint, self.test_key.fingerprint @@ -138,10 +138,10 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.test_signature.document_version, self.test_document.latest_version ) - self.assertEqual(self.test_signature.key_id, TEST_KEY_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(self.test_signature.public_key_fingerprint, None) - self._create_test_key() + self._create_test_key_private() signature = DetachedSignature.objects.first() @@ -150,7 +150,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): ) def test_detached_signature_post_no_key_verify(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -162,7 +162,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.test_signature.document_version, self.test_document.latest_version ) - self.assertEqual(self.test_signature.key_id, TEST_KEY_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual( self.test_signature.public_key_fingerprint, self.test_key.fingerprint @@ -199,10 +199,10 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): signature = EmbeddedSignature.objects.first() self.assertEqual(signature.document_version, signed_version) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) -class EmbeddedSignaturesTestCase(GenericDocumentTestCase): +class EmbeddedSignaturesTestCase(KeyTestMixin, GenericDocumentTestCase): auto_upload_document = False def test_unsigned_document_version_method(self): @@ -256,7 +256,7 @@ class EmbeddedSignaturesTestCase(GenericDocumentTestCase): ) def test_signing(self): - self.test_key = Key.objects.create(key_data=TEST_KEY_DATA) + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -269,8 +269,8 @@ class EmbeddedSignaturesTestCase(GenericDocumentTestCase): new_version = EmbeddedSignature.objects.sign_document_version( document_version=self.test_document.latest_version, - key=self.test_key, - passphrase=TEST_KEY_PASSPHRASE + key=self.test_key_private, + passphrase=TEST_KEY_PRIVATE_PASSPHRASE ) self.assertEqual(EmbeddedSignature.objects.count(), 1) diff --git a/mayan/apps/document_signatures/tests/test_views.py b/mayan/apps/document_signatures/tests/test_views.py index b699dfcd0e..96b14618fb 100644 --- a/mayan/apps/document_signatures/tests/test_views.py +++ b/mayan/apps/document_signatures/tests/test_views.py @@ -2,6 +2,8 @@ from __future__ import absolute_import, unicode_literals from django_downloadview.test import assert_download_response +from mayan.apps.django_gpg.permissions import permission_key_sign +from mayan.apps.django_gpg.tests.mixins import KeyTestMixin from mayan.apps.documents.models import DocumentVersion from mayan.apps.documents.tests import ( GenericDocumentViewTestCase, TEST_DOCUMENT_PATH @@ -9,6 +11,8 @@ from mayan.apps.documents.tests import ( 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, @@ -16,59 +20,23 @@ from ..permissions import ( permission_document_version_signature_view ) -from .literals import TEST_SIGNATURE_FILE_PATH, TEST_SIGNED_DOCUMENT_PATH -from .mixins import SignaturesTestMixin +from .literals import TEST_SIGNED_DOCUMENT_PATH +from .mixins import ( + DetachedSignatureViewTestMixin, EmbeddedSignatureViewTestMixin, + SignatureTestMixin, SignatureViewTestMixin +) TEST_UNSIGNED_DOCUMENT_COUNT = 4 TEST_SIGNED_DOCUMENT_COUNT = 2 -class SignaturesViewTestMixin(object): - def _request_test_document_version_signature_delete_view(self): - return self.post( - viewname='signatures:document_version_signature_delete', - kwargs={'pk': self.test_signature.pk} - ) - - def _request_test_document_version_signature_details_view(self): - return self.get( - viewname='signatures:document_version_signature_details', - kwargs={'pk': self.test_signature.pk} - ) - - def _request_test_document_version_signature_download_view(self): - return self.get( - viewname='signatures:document_version_signature_download', - kwargs={'pk': self.test_signature.pk} - ) - - def _request_test_document_version_signature_list_view(self, document): - return self.get( - viewname='signatures:document_version_signature_list', - kwargs={'pk': self.test_document.latest_version.pk} - ) - - def _request_test_document_version_signature_upload_view(self): - with open(TEST_SIGNATURE_FILE_PATH, mode='rb') as file_object: - return self.post( - viewname='signatures:document_version_signature_upload', - kwargs={'pk': self.test_document.latest_version.pk}, - data={'signature_file': file_object} - ) - - def _request_all_test_document_version_signature_verify_view(self): - return self.post( - viewname='signatures:all_document_version_signature_verify' - ) - - class SignaturesViewTestCase( - SignaturesTestMixin, SignaturesViewTestMixin, GenericDocumentViewTestCase + SignatureTestMixin, SignatureViewTestMixin, GenericDocumentViewTestCase ): auto_upload_document = False def test_signature_delete_view_no_permission(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -85,7 +53,7 @@ class SignaturesViewTestCase( self.assertEqual(DetachedSignature.objects.count(), 1) def test_signature_delete_view_with_access(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -106,7 +74,7 @@ class SignaturesViewTestCase( self.assertEqual(DetachedSignature.objects.count(), 0) def test_signature_detail_view_no_permission(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -117,7 +85,7 @@ class SignaturesViewTestCase( self.assertEqual(response.status_code, 404) def test_signature_detail_view_with_access(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -135,6 +103,7 @@ class SignaturesViewTestCase( status_code=200 ) + """ def test_signature_download_view_no_permission(self): self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -163,9 +132,9 @@ class SignaturesViewTestCase( assert_download_response( self, response=response, content=file_object.read(), ) - + """ def test_signature_list_view_no_permission(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -178,7 +147,7 @@ class SignaturesViewTestCase( self.assertEqual(response.status_code, 403) def test_signature_list_view_with_access(self): - self._create_test_key() + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -195,7 +164,7 @@ class SignaturesViewTestCase( ) self.assertEqual(response.status_code, 200) self.assertEqual(response.context['object_list'].count(), 1) - + """ def test_signature_upload_view_no_permission(self): self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -218,7 +187,7 @@ class SignaturesViewTestCase( self.assertEqual(response.status_code, 302) self.assertEqual(DetachedSignature.objects.count(), 1) - + """ def test_missing_signature_verify_view_no_permission(self): # Silence converter logging self._silence_logger(name='mayan.apps.converter.backends') diff --git a/mayan/apps/documents/tests/mixins.py b/mayan/apps/documents/tests/mixins.py index cb692a1f10..27579eb129 100644 --- a/mayan/apps/documents/tests/mixins.py +++ b/mayan/apps/documents/tests/mixins.py @@ -58,6 +58,8 @@ class DocumentTestMixin(object): self.test_document = document self.test_documents.append(document) + self.test_document_page = document.latest_version.pages.first() + self.test_document_version = document.latest_version def _calculate_test_document_path(self): if not self.test_document_path: