From a3143ec512fb5efefcfb4e6af61dbf67440ce6f7 Mon Sep 17 00:00:00 2001 From: jonaswinkler Date: Sun, 29 Nov 2020 19:22:49 +0100 Subject: [PATCH] more tests! --- .../samples/documents/archive/0000001.pdf | Bin 0 -> 150479 bytes src/documents/tests/test_api.py | 36 +++++++++++++++ src/documents/tests/test_consumer.py | 42 +++++++++++++++--- .../tests/test_management_exporter.py | 13 ++++-- src/documents/tests/test_parsers.py | 1 + 5 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 src/documents/tests/samples/documents/archive/0000001.pdf diff --git a/src/documents/tests/samples/documents/archive/0000001.pdf b/src/documents/tests/samples/documents/archive/0000001.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ea08363bfe30f5728675913667557755113fe4f9 GIT binary patch literal 150479 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 L<;wMr8!-O@UHFXz literal 0 HcmV?d00001 diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index dabae6d82..9135e9f15 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -100,6 +100,42 @@ class DocumentApiTest(DirectoriesMixin, APITestCase): self.assertEqual(response.status_code, 200) self.assertEqual(response.content, content_thumbnail) + def test_download_with_archive(self): + + _, filename = tempfile.mkstemp(dir=self.dirs.originals_dir) + + content = b"This is a test" + content_archive = b"This is the same test but archived" + + with open(filename, "wb") as f: + f.write(content) + + doc = Document.objects.create(title="none", filename=os.path.basename(filename), + mime_type="application/pdf") + + with open(os.path.join(self.dirs.archive_dir, "{:07d}.pdf".format(doc.pk)), "wb") as f: + f.write(content_archive) + + response = self.client.get('/api/documents/{}/download/'.format(doc.pk)) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, content_archive) + + response = self.client.get('/api/documents/{}/download/?original=true'.format(doc.pk)) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, content) + + response = self.client.get('/api/documents/{}/preview/'.format(doc.pk)) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, content_archive) + + response = self.client.get('/api/documents/{}/preview/?original=true'.format(doc.pk)) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, content) + def test_document_actions_not_existing_file(self): doc = Document.objects.create(title="none", filename=os.path.basename("asd"), mime_type="application/pdf") diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index cbf38ab6c..3e25e9a9b 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -1,5 +1,6 @@ import os import re +import shutil import tempfile from unittest import mock from unittest.mock import MagicMock @@ -368,9 +369,10 @@ class DummyParser(DocumentParser): # not important during tests raise NotImplementedError() - def __init__(self, logging_group, scratch_dir): + def __init__(self, logging_group, scratch_dir, archive_path): super(DummyParser, self).__init__(logging_group) _, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=scratch_dir) + self.archive_path = archive_path def get_optimised_thumbnail(self, document_path, mime_type): return self.fake_thumb @@ -411,7 +413,7 @@ def fake_magic_from_file(file, mime=False): class TestConsumer(DirectoriesMixin, TestCase): def make_dummy_parser(self, logging_group): - return DummyParser(logging_group, self.dirs.scratch_dir) + return DummyParser(logging_group, self.dirs.scratch_dir, self.get_test_archive_file()) def make_faulty_parser(self, logging_group): return FaultyParser(logging_group, self.dirs.scratch_dir) @@ -432,8 +434,16 @@ class TestConsumer(DirectoriesMixin, TestCase): self.consumer = Consumer() def get_test_file(self): - fd, f = tempfile.mkstemp(suffix=".pdf", dir=self.dirs.scratch_dir) - return f + src = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000001.pdf") + dst = os.path.join(self.dirs.scratch_dir, "sample.pdf") + shutil.copy(src, dst) + return dst + + def get_test_archive_file(self): + src = os.path.join(os.path.dirname(__file__), "samples", "documents", "archive", "0000001.pdf") + dst = os.path.join(self.dirs.scratch_dir, "sample_archive.pdf") + shutil.copy(src, dst) + return dst def testNormalOperation(self): @@ -454,6 +464,13 @@ class TestConsumer(DirectoriesMixin, TestCase): document.thumbnail_path )) + self.assertTrue(os.path.isfile( + document.archive_path + )) + + self.assertEqual(document.checksum, "42995833e01aea9b3edee44bbfdd7ce1") + self.assertEqual(document.archive_checksum, "62acb0bcbfbcaa62ca6ad3668e4e404b") + self.assertFalse(os.path.isfile(filename)) def testOverrideFilename(self): @@ -501,7 +518,7 @@ class TestConsumer(DirectoriesMixin, TestCase): self.fail("Should throw exception") - def testDuplicates(self): + def testDuplicates1(self): self.consumer.try_consume_file(self.get_test_file()) try: @@ -512,6 +529,21 @@ class TestConsumer(DirectoriesMixin, TestCase): self.fail("Should throw exception") + def testDuplicates2(self): + self.consumer.try_consume_file(self.get_test_file()) + + try: + self.consumer.try_consume_file(self.get_test_archive_file()) + except ConsumerError as e: + self.assertTrue(str(e).endswith("It is a duplicate.")) + return + + self.fail("Should throw exception") + + def testDuplicates3(self): + self.consumer.try_consume_file(self.get_test_archive_file()) + self.consumer.try_consume_file(self.get_test_file()) + @mock.patch("documents.parsers.document_consumer_declaration.send") def testNoParsers(self, m): m.return_value = [] diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index 18171af75..dca2114c2 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -23,10 +23,7 @@ class TestExporter(DirectoriesMixin, TestCase): file = os.path.join(self.dirs.originals_dir, "0000001.pdf") - with open(file, "rb") as f: - checksum = hashlib.md5(f.read()).hexdigest() - - Document.objects.create(checksum=checksum, title="wow", filename="0000001.pdf", id=1, mime_type="application/pdf") + Document.objects.create(checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", title="wow", filename="0000001.pdf", id=1, mime_type="application/pdf") Document.objects.create(checksum="9c9691e51741c1f4f41a20896af31770", title="wow", filename="0000002.pdf.gpg", id=2, mime_type="application/pdf", storage_type=Document.STORAGE_TYPE_GPG) Tag.objects.create(name="t") DocumentType.objects.create(name="dt") @@ -51,6 +48,14 @@ class TestExporter(DirectoriesMixin, TestCase): checksum = hashlib.md5(f.read()).hexdigest() self.assertEqual(checksum, element['fields']['checksum']) + if document_exporter.EXPORTER_ARCHIVE_NAME in element: + fname = os.path.join(target, element[document_exporter.EXPORTER_ARCHIVE_NAME]) + self.assertTrue(os.path.exists(fname)) + + with open(fname, "rb") as f: + checksum = hashlib.md5(f.read()).hexdigest() + self.assertEqual(checksum, element['fields']['archive_checksum']) + Document.objects.create(checksum="AAAAAAAAAAAAAAAAA", title="wow", filename="0000004.pdf", id=3, mime_type="application/pdf") self.assertRaises(FileNotFoundError, call_command, 'document_exporter', target) diff --git a/src/documents/tests/test_parsers.py b/src/documents/tests/test_parsers.py index 705dcb08d..722f4ca36 100644 --- a/src/documents/tests/test_parsers.py +++ b/src/documents/tests/test_parsers.py @@ -82,6 +82,7 @@ class TestBaseParser(TestCase): shutil.rmtree(self.scratch) @mock.patch("documents.parsers.DocumentParser.get_thumbnail", fake_get_thumbnail) + @override_settings(OPTIMIZE_THUMBNAILS=True) def test_get_optimised_thumbnail(self): parser = DocumentParser(None)