def sanity_check(): messages = sanity_checker.check_sanity() if len(messages) > 0: raise SanityFailedError(messages) else: return "No issues detected."
def test_orphaned_file(self): doc = self.make_test_data() Path(self.dirs.originals_dir, "orphaned").touch() messages = check_sanity() self.assertFalse(messages.has_error()) self.assertTrue(messages.has_warning()) self.assertEqual(len(messages), 1) self.assertRegex(messages[0]['message'], "Orphaned file in media dir")
def test_empty_content(self): doc = self.make_test_data() doc.content = "" doc.save() messages = check_sanity() self.assertFalse(messages.has_error()) self.assertFalse(messages.has_warning()) self.assertEqual(len(messages), 1) self.assertRegex(messages[0]['message'], "Document .* has no content.")
def test_error_tostring(self): Document.objects.create(title="test", checksum="dgfhj", archive_checksum="dfhg", content="", pk=1, filename="0000001.pdf", archive_filename="0000001.pdf") string = str(SanityFailedError(check_sanity())) self.assertIsNotNone(string)
def sanity_check(): messages = sanity_checker.check_sanity() messages.log_messages() if messages.has_error(): raise SanityCheckFailedException( "Sanity check failed with errors. See log.") elif messages.has_warning(): return "Sanity check exited with warnings. See log." elif len(messages) > 0: return "Sanity check exited with infos. See log." else: return "No issues detected."
def test_archive_checksum_mismatch(self): doc = self.make_test_data() doc.archive_checksum = "WOW" doc.save() self.assertEqual(len(check_sanity()), 1)
def handle(self, *args, **options): messages = check_sanity(progress=not options['no_progress_bar']) messages.log_messages()
def test_success(self): self.make_test_data() self.assertEqual(len(check_sanity()), 0)
def handle(self, *args, **options): messages = check_sanity(progress=True) messages.log_messages()
def test_archive_checksum_no_filename(self): doc = self.make_test_data() doc.archive_filename = None doc.save() self.assertEqual(len(check_sanity()), 2)
def test_all(self): Document.objects.create(title="test", checksum="dgfhj", archive_checksum="dfhg", content="", pk=1, filename="0000001.pdf") string = str(SanityFailedError(check_sanity()))
def assertSanityError(self, messageRegex): messages = check_sanity() self.assertTrue(messages.has_error()) self.assertRegex(messages[0]['message'], messageRegex)
def test_exporter(self, use_filename_format=False): shutil.rmtree(os.path.join(self.dirs.media_dir, "documents")) shutil.copytree( os.path.join(os.path.dirname(__file__), "samples", "documents"), os.path.join(self.dirs.media_dir, "documents")) manifest = self._do_export(use_filename_format=use_filename_format) self.assertEqual(len(manifest), 7) self.assertEqual( len( list( filter(lambda e: e['model'] == 'documents.document', manifest))), 4) self.assertTrue( os.path.exists(os.path.join(self.target, "manifest.json"))) self.assertEqual( self._get_document_from_manifest(manifest, self.d1.id)['fields']['title'], "wow1") self.assertEqual( self._get_document_from_manifest(manifest, self.d2.id)['fields']['title'], "wow2") self.assertEqual( self._get_document_from_manifest(manifest, self.d3.id)['fields']['title'], "wow2") self.assertEqual( self._get_document_from_manifest(manifest, self.d4.id)['fields']['title'], "wow_dec") for element in manifest: if element['model'] == 'documents.document': fname = os.path.join( self.target, element[document_exporter.EXPORTER_FILE_NAME]) self.assertTrue(os.path.exists(fname)) self.assertTrue( os.path.exists( os.path.join( self.target, element[ document_exporter.EXPORTER_THUMBNAIL_NAME]))) with open(fname, "rb") as f: checksum = hashlib.md5(f.read()).hexdigest() self.assertEqual(checksum, element['fields']['checksum']) self.assertEqual(element['fields']['storage_type'], Document.STORAGE_TYPE_UNENCRYPTED) if document_exporter.EXPORTER_ARCHIVE_NAME in element: fname = os.path.join( self.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']) with paperless_environment() as dirs: self.assertEqual(Document.objects.count(), 4) Document.objects.all().delete() Correspondent.objects.all().delete() DocumentType.objects.all().delete() Tag.objects.all().delete() self.assertEqual(Document.objects.count(), 0) call_command('document_importer', self.target) self.assertEqual(Document.objects.count(), 4) self.assertEqual(Tag.objects.count(), 1) self.assertEqual(Correspondent.objects.count(), 1) self.assertEqual(DocumentType.objects.count(), 1) self.assertEqual(Document.objects.get(id=self.d1.id).title, "wow1") self.assertEqual(Document.objects.get(id=self.d2.id).title, "wow2") self.assertEqual(Document.objects.get(id=self.d3.id).title, "wow2") self.assertEqual( Document.objects.get(id=self.d4.id).title, "wow_dec") messages = check_sanity() # everything is alright after the test self.assertEqual(len(messages), 0, str([str(m) for m in messages]))
def test_archive_no_access(self): doc = self.make_test_data() os.chmod(doc.archive_path, 0o000) self.assertEqual(len(check_sanity()), 1) os.chmod(doc.archive_path, 0o777)
def test_no_archive(self): doc = self.make_test_data() os.remove(doc.archive_path) self.assertEqual(len(check_sanity()), 1)
def test_original_no_access(self): doc = self.make_test_data() os.chmod(doc.source_path, 0o000) self.assertEqual(len(check_sanity()), 1) os.chmod(doc.source_path, 0o777)
def test_no_original(self): doc = self.make_test_data() os.remove(doc.source_path) self.assertEqual(len(check_sanity()), 1)
def test_no_thumbnail(self): doc = self.make_test_data() os.remove(doc.thumbnail_path) self.assertEqual(len(check_sanity()), 1)
def test_no_docs(self): self.assertEqual(len(check_sanity()), 0)
def test_empty_content(self): doc = self.make_test_data() doc.content = "" doc.save() self.assertEqual(len(check_sanity()), 1)
def test_exporter(self): shutil.rmtree(os.path.join(self.dirs.media_dir, "documents")) shutil.copytree( os.path.join(os.path.dirname(__file__), "samples", "documents"), os.path.join(self.dirs.media_dir, "documents")) file = os.path.join(self.dirs.originals_dir, "0000001.pdf") Document.objects.create( content="Content", checksum="42995833e01aea9b3edee44bbfdd7ce1", archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b", title="wow", filename="0000001.pdf", mime_type="application/pdf") Document.objects.create(content="Content", checksum="9c9691e51741c1f4f41a20896af31770", title="wow", filename="0000002.pdf.gpg", mime_type="application/pdf", storage_type=Document.STORAGE_TYPE_GPG) Tag.objects.create(name="t") DocumentType.objects.create(name="dt") Correspondent.objects.create(name="c") target = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, target) call_command('document_exporter', target) with open(os.path.join(target, "manifest.json")) as f: manifest = json.load(f) self.assertEqual(len(manifest), 5) for element in manifest: if element['model'] == 'documents.document': fname = os.path.join( target, element[document_exporter.EXPORTER_FILE_NAME]) self.assertTrue(os.path.exists(fname)) self.assertTrue( os.path.exists( os.path.join( target, element[ document_exporter.EXPORTER_THUMBNAIL_NAME]))) with open(fname, "rb") as f: 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']) with paperless_environment() as dirs: call_command('document_importer', target) messages = check_sanity() # everything is alright after the test self.assertEqual(len(messages), 0, str([str(m) for m in messages]))
def test_orphaned_file(self): doc = self.make_test_data() Path(self.dirs.originals_dir, "orphaned").touch() self.assertEqual(len(check_sanity()), 1)