diff --git a/contrib/sample_documents/key0x5F3F7F75D210724D.asc b/contrib/sample_documents/key0x5F3F7F75D210724D.asc new file mode 100644 index 0000000000..9bb9ebe744 --- /dev/null +++ b/contrib/sample_documents/key0x5F3F7F75D210724D.asc @@ -0,0 +1,83 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: PGP Universal 2.9.1 (Build 347) + +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 +1zzs +=izbf +-----END PGP PUBLIC KEY BLOCK----- diff --git a/mayan/apps/document_signatures/tests.py b/mayan/apps/document_signatures/tests.py index 2aed00419d..36d78e73dd 100644 --- a/mayan/apps/document_signatures/tests.py +++ b/mayan/apps/document_signatures/tests.py @@ -8,9 +8,16 @@ from django.utils import unittest from documents.literals import VERSION_UPDATE_MAJOR, RELEASE_LEVEL_FINAL from documents.models import Document, DocumentType +from django_gpg.api import SIGNATURE_STATE_VALID +from django_gpg.runtime import gpg from .models import DocumentVersionSignature +TEST_DOCUMENT_PATH = os.path.join(settings.BASE_DIR, 'contrib', 'sample_documents', 'mayan_11_1.pdf') +TEST_SIGNED_DOCUMENT_PATH = os.path.join(settings.BASE_DIR, 'contrib', 'sample_documents', 'mayan_11_1.pdf.gpg') +TEST_SIGNATURE_FILE_PATH = os.path.join(settings.BASE_DIR, 'contrib', 'sample_documents', 'mayan_11_1.pdf.sig') +TEST_KEY_FILE = os.path.join(settings.BASE_DIR, 'contrib', 'sample_documents', 'key0x5F3F7F75D210724D.asc') + class DocumentTestCase(unittest.TestCase): def setUp(self): @@ -23,25 +30,28 @@ class DocumentTestCase(unittest.TestCase): ) self.document.save() - file_object = open(os.path.join(settings.SITE_ROOT, 'contrib', 'sample_documents', 'mayan_11_1.pdf')) - new_version = self.document.new_version(file=File(file_object, name='mayan_11_1.pdf')) - file_object.close() + with open(TEST_DOCUMENT_PATH) as file_object: + new_version = self.document.new_version(file=File(file_object, name='mayan_11_1.pdf')) + + with open(TEST_KEY_FILE) as file_object: + gpg.import_key(file_object.read()) def test_document_no_signature(self): self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False) def test_new_document_version_signed(self): - file_object = open(os.path.join(settings.SITE_ROOT, 'contrib', 'sample_documents', 'mayan_11_1.pdf.gpg')) - new_version_data = { - 'comment': 'test comment 1', - 'version_update': VERSION_UPDATE_MAJOR, - 'release_level': RELEASE_LEVEL_FINAL, - 'serial': 0, - } + with open(TEST_SIGNED_DOCUMENT_PATH) as file_object: + new_version_data = { + 'comment': 'test comment 1', + 'version_update': VERSION_UPDATE_MAJOR, + 'release_level': RELEASE_LEVEL_FINAL, + 'serial': 0, + } + + self.document.new_version(file=File(file_object, name='mayan_11_1.pdf.gpg'), **new_version_data) self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False) - # self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID) - # TODO: verify_signature is failing, check + self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID) def test_detached_signatures(self): new_version_data = { @@ -50,20 +60,17 @@ class DocumentTestCase(unittest.TestCase): 'release_level': RELEASE_LEVEL_FINAL, 'serial': 0, } - file_object = open(os.path.join(settings.SITE_ROOT, 'contrib', 'sample_documents', 'mayan_11_1.pdf')) - new_version = self.document.new_version(file=File(file_object), **new_version_data) - file_object.close() + with open(TEST_DOCUMENT_PATH) as file_object: + self.document.new_version(file=File(file_object), **new_version_data) # GPGVerificationError self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document), None) - file_object = open(os.path.join(settings.SITE_ROOT, 'contrib', 'sample_documents', 'mayan_11_1.pdf.sig'), 'rb') - DocumentVersionSignature.objects.add_detached_signature(self.document, File(file_object)) - file_object.close() + with open(TEST_SIGNATURE_FILE_PATH, 'rb') as file_object: + DocumentVersionSignature.objects.add_detached_signature(self.document, File(file_object)) self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), True) - # self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID) - # TODO: verify_signature is failing, check + self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID) def tearDown(self): self.document.delete()