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 <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -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']
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user