mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
more tests!
This commit is contained in:
parent
39c682dc07
commit
a3143ec512
BIN
src/documents/tests/samples/documents/archive/0000001.pdf
Normal file
BIN
src/documents/tests/samples/documents/archive/0000001.pdf
Normal file
Binary file not shown.
@ -100,6 +100,42 @@ class DocumentApiTest(DirectoriesMixin, APITestCase):
|
|||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.content, content_thumbnail)
|
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):
|
def test_document_actions_not_existing_file(self):
|
||||||
|
|
||||||
doc = Document.objects.create(title="none", filename=os.path.basename("asd"), mime_type="application/pdf")
|
doc = Document.objects.create(title="none", filename=os.path.basename("asd"), mime_type="application/pdf")
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
@ -368,9 +369,10 @@ class DummyParser(DocumentParser):
|
|||||||
# not important during tests
|
# not important during tests
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def __init__(self, logging_group, scratch_dir):
|
def __init__(self, logging_group, scratch_dir, archive_path):
|
||||||
super(DummyParser, self).__init__(logging_group)
|
super(DummyParser, self).__init__(logging_group)
|
||||||
_, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=scratch_dir)
|
_, self.fake_thumb = tempfile.mkstemp(suffix=".png", dir=scratch_dir)
|
||||||
|
self.archive_path = archive_path
|
||||||
|
|
||||||
def get_optimised_thumbnail(self, document_path, mime_type):
|
def get_optimised_thumbnail(self, document_path, mime_type):
|
||||||
return self.fake_thumb
|
return self.fake_thumb
|
||||||
@ -411,7 +413,7 @@ def fake_magic_from_file(file, mime=False):
|
|||||||
class TestConsumer(DirectoriesMixin, TestCase):
|
class TestConsumer(DirectoriesMixin, TestCase):
|
||||||
|
|
||||||
def make_dummy_parser(self, logging_group):
|
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):
|
def make_faulty_parser(self, logging_group):
|
||||||
return FaultyParser(logging_group, self.dirs.scratch_dir)
|
return FaultyParser(logging_group, self.dirs.scratch_dir)
|
||||||
@ -432,8 +434,16 @@ class TestConsumer(DirectoriesMixin, TestCase):
|
|||||||
self.consumer = Consumer()
|
self.consumer = Consumer()
|
||||||
|
|
||||||
def get_test_file(self):
|
def get_test_file(self):
|
||||||
fd, f = tempfile.mkstemp(suffix=".pdf", dir=self.dirs.scratch_dir)
|
src = os.path.join(os.path.dirname(__file__), "samples", "documents", "originals", "0000001.pdf")
|
||||||
return f
|
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):
|
def testNormalOperation(self):
|
||||||
|
|
||||||
@ -454,6 +464,13 @@ class TestConsumer(DirectoriesMixin, TestCase):
|
|||||||
document.thumbnail_path
|
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))
|
self.assertFalse(os.path.isfile(filename))
|
||||||
|
|
||||||
def testOverrideFilename(self):
|
def testOverrideFilename(self):
|
||||||
@ -501,7 +518,7 @@ class TestConsumer(DirectoriesMixin, TestCase):
|
|||||||
|
|
||||||
self.fail("Should throw exception")
|
self.fail("Should throw exception")
|
||||||
|
|
||||||
def testDuplicates(self):
|
def testDuplicates1(self):
|
||||||
self.consumer.try_consume_file(self.get_test_file())
|
self.consumer.try_consume_file(self.get_test_file())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -512,6 +529,21 @@ class TestConsumer(DirectoriesMixin, TestCase):
|
|||||||
|
|
||||||
self.fail("Should throw exception")
|
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")
|
@mock.patch("documents.parsers.document_consumer_declaration.send")
|
||||||
def testNoParsers(self, m):
|
def testNoParsers(self, m):
|
||||||
m.return_value = []
|
m.return_value = []
|
||||||
|
@ -23,10 +23,7 @@ class TestExporter(DirectoriesMixin, TestCase):
|
|||||||
|
|
||||||
file = os.path.join(self.dirs.originals_dir, "0000001.pdf")
|
file = os.path.join(self.dirs.originals_dir, "0000001.pdf")
|
||||||
|
|
||||||
with open(file, "rb") as f:
|
Document.objects.create(checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", title="wow", filename="0000001.pdf", id=1, mime_type="application/pdf")
|
||||||
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="9c9691e51741c1f4f41a20896af31770", title="wow", filename="0000002.pdf.gpg", id=2, mime_type="application/pdf", storage_type=Document.STORAGE_TYPE_GPG)
|
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")
|
Tag.objects.create(name="t")
|
||||||
DocumentType.objects.create(name="dt")
|
DocumentType.objects.create(name="dt")
|
||||||
@ -51,6 +48,14 @@ class TestExporter(DirectoriesMixin, TestCase):
|
|||||||
checksum = hashlib.md5(f.read()).hexdigest()
|
checksum = hashlib.md5(f.read()).hexdigest()
|
||||||
self.assertEqual(checksum, element['fields']['checksum'])
|
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")
|
Document.objects.create(checksum="AAAAAAAAAAAAAAAAA", title="wow", filename="0000004.pdf", id=3, mime_type="application/pdf")
|
||||||
|
|
||||||
self.assertRaises(FileNotFoundError, call_command, 'document_exporter', target)
|
self.assertRaises(FileNotFoundError, call_command, 'document_exporter', target)
|
||||||
|
@ -82,6 +82,7 @@ class TestBaseParser(TestCase):
|
|||||||
shutil.rmtree(self.scratch)
|
shutil.rmtree(self.scratch)
|
||||||
|
|
||||||
@mock.patch("documents.parsers.DocumentParser.get_thumbnail", fake_get_thumbnail)
|
@mock.patch("documents.parsers.DocumentParser.get_thumbnail", fake_get_thumbnail)
|
||||||
|
@override_settings(OPTIMIZE_THUMBNAILS=True)
|
||||||
def test_get_optimised_thumbnail(self):
|
def test_get_optimised_thumbnail(self):
|
||||||
parser = DocumentParser(None)
|
parser = DocumentParser(None)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user