from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from django.core.management import CommandError
-from documents.settings import EXPORTER_CRYPTO_ALGO_NAME
-from documents.settings import EXPORTER_CRYPTO_KEY_ITERATIONS_NAME
-from documents.settings import EXPORTER_CRYPTO_KEY_SIZE_NAME
-from documents.settings import EXPORTER_CRYPTO_SALT_NAME
-from documents.settings import EXPORTER_CRYPTO_SETTINGS_NAME
+from paperless.settings import EXPORTER_CRYPTO_ALGO_NAME
+from paperless.settings import EXPORTER_CRYPTO_KEY_ITERATIONS_NAME
+from paperless.settings import EXPORTER_CRYPTO_KEY_SIZE_NAME
+from paperless.settings import EXPORTER_CRYPTO_SALT_NAME
+from paperless.settings import EXPORTER_CRYPTO_SETTINGS_NAME
class CryptFields(TypedDict):
"url": "https://docs.paperless-ngx.com/api/",
},
"ENUM_NAME_OVERRIDES": {
- "MatchingAlgorithm": "documents.models.MatchingModel.MATCHING_ALGORITHMS",
+ "MatchingAlgorithm": "paperless.models.MatchingModel.MATCHING_ALGORITHMS",
},
}
self.doc1.refresh_from_db()
self.assertFalse(self.doc1.tags.filter(pk=self.t1.pk).exists())
- @mock.patch("documents.serialisers.bulk_edit.modify_tags")
+ @mock.patch("paperless.serialisers.bulk_edit.modify_tags")
def test_api_modify_tags(self, m):
self.setup_mock(m, "modify_tags")
response = self.client.post(
self.assertEqual(kwargs["add_tags"], [self.t1.id])
self.assertEqual(kwargs["remove_tags"], [self.t2.id])
- @mock.patch("documents.serialisers.bulk_edit.modify_tags")
+ @mock.patch("paperless.serialisers.bulk_edit.modify_tags")
def test_api_modify_tags_not_provided(self, m):
"""
GIVEN:
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
m.assert_not_called()
- @mock.patch("documents.serialisers.bulk_edit.modify_custom_fields")
+ @mock.patch("paperless.serialisers.bulk_edit.modify_custom_fields")
def test_api_modify_custom_fields(self, m):
self.setup_mock(m, "modify_custom_fields")
response = self.client.post(
self.assertEqual(kwargs["add_custom_fields"], [self.cf1.id])
self.assertEqual(kwargs["remove_custom_fields"], [self.cf2.id])
- @mock.patch("documents.serialisers.bulk_edit.modify_custom_fields")
+ @mock.patch("paperless.serialisers.bulk_edit.modify_custom_fields")
def test_api_modify_custom_fields_with_values(self, m):
self.setup_mock(m, "modify_custom_fields")
response = self.client.post(
self.assertEqual(kwargs["add_custom_fields"], {str(self.cf1.id): "foo"})
self.assertEqual(kwargs["remove_custom_fields"], [self.cf2.id])
- @mock.patch("documents.serialisers.bulk_edit.modify_custom_fields")
+ @mock.patch("paperless.serialisers.bulk_edit.modify_custom_fields")
def test_api_modify_custom_fields_invalid_params(self, m):
"""
GIVEN:
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
m.assert_not_called()
- @mock.patch("documents.serialisers.bulk_edit.delete")
+ @mock.patch("paperless.serialisers.bulk_edit.delete")
def test_api_delete(self, m):
self.setup_mock(m, "delete")
response = self.client.post(
self.assertEqual(args[0], [self.doc1.id])
self.assertEqual(len(kwargs), 0)
- @mock.patch("documents.serialisers.bulk_edit.set_storage_path")
+ @mock.patch("paperless.serialisers.bulk_edit.set_storage_path")
def test_api_set_storage_path(self, m):
"""
GIVEN:
self.assertListEqual(args[0], [self.doc1.id])
self.assertEqual(kwargs["storage_path"], self.sp1.id)
- @mock.patch("documents.serialisers.bulk_edit.set_storage_path")
+ @mock.patch("paperless.serialisers.bulk_edit.set_storage_path")
def test_api_unset_storage_path(self, m):
"""
GIVEN:
],
)
- @mock.patch("documents.serialisers.bulk_edit.set_permissions")
+ @mock.patch("paperless.serialisers.bulk_edit.set_permissions")
def test_set_permissions(self, m):
self.setup_mock(m, "set_permissions")
user1 = User.objects.create(username="user1")
self.assertCountEqual(args[0], [self.doc2.id, self.doc3.id])
self.assertEqual(len(kwargs["set_permissions"]["view"]["users"]), 2)
- @mock.patch("documents.serialisers.bulk_edit.set_permissions")
+ @mock.patch("paperless.serialisers.bulk_edit.set_permissions")
def test_set_permissions_merge(self, m):
self.setup_mock(m, "set_permissions")
user1 = User.objects.create(username="user1")
args, kwargs = m.call_args
self.assertEqual(kwargs["merge"], True)
- @mock.patch("documents.serialisers.bulk_edit.set_storage_path")
- @mock.patch("documents.serialisers.bulk_edit.merge")
+ @mock.patch("paperless.serialisers.bulk_edit.set_storage_path")
+ @mock.patch("paperless.serialisers.bulk_edit.merge")
def test_insufficient_global_perms(self, mock_merge, mock_set_storage):
"""
GIVEN:
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
mock_merge.assert_not_called()
- @mock.patch("documents.serialisers.bulk_edit.set_permissions")
+ @mock.patch("paperless.serialisers.bulk_edit.set_permissions")
def test_insufficient_permissions_ownership(self, m):
"""
GIVEN:
self.assertEqual(response.status_code, status.HTTP_200_OK)
m.assert_called_once()
- @mock.patch("documents.serialisers.bulk_edit.set_storage_path")
+ @mock.patch("paperless.serialisers.bulk_edit.set_storage_path")
def test_insufficient_permissions_edit(self, m):
"""
GIVEN:
m.assert_called_once()
- @mock.patch("documents.serialisers.bulk_edit.rotate")
+ @mock.patch("paperless.serialisers.bulk_edit.rotate")
def test_rotate(self, m):
self.setup_mock(m, "rotate")
response = self.client.post(
self.assertCountEqual(args[0], [self.doc2.id, self.doc3.id])
self.assertEqual(kwargs["degrees"], 90)
- @mock.patch("documents.serialisers.bulk_edit.rotate")
+ @mock.patch("paperless.serialisers.bulk_edit.rotate")
def test_rotate_invalid_params(self, m):
response = self.client.post(
"/api/documents/bulk_edit/",
m.assert_not_called()
- @mock.patch("documents.serialisers.bulk_edit.merge")
+ @mock.patch("paperless.serialisers.bulk_edit.merge")
def test_merge(self, m):
self.setup_mock(m, "merge")
response = self.client.post(
self.assertEqual(kwargs["metadata_document_id"], self.doc3.id)
self.assertEqual(kwargs["user"], self.user)
- @mock.patch("documents.serialisers.bulk_edit.merge")
+ @mock.patch("paperless.serialisers.bulk_edit.merge")
def test_merge_and_delete_insufficient_permissions(self, m):
self.doc1.owner = User.objects.get(username="temp_admin")
self.doc1.save()
self.assertEqual(response.status_code, status.HTTP_200_OK)
m.assert_called_once()
- @mock.patch("documents.serialisers.bulk_edit.merge")
+ @mock.patch("paperless.serialisers.bulk_edit.merge")
def test_merge_invalid_parameters(self, m):
"""
GIVEN:
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
m.assert_not_called()
- @mock.patch("documents.serialisers.bulk_edit.split")
+ @mock.patch("paperless.serialisers.bulk_edit.split")
def test_split(self, m):
self.setup_mock(m, "split")
response = self.client.post(
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn(b"delete_originals must be a boolean", response.content)
- @mock.patch("documents.serialisers.bulk_edit.delete_pages")
+ @mock.patch("paperless.serialisers.bulk_edit.delete_pages")
def test_delete_pages(self, m):
self.setup_mock(m, "delete_pages")
response = self.client.post(
response = self.client.get(f"/api/documents/{doc.pk}/suggestions/")
self.assertEqual(response.status_code, status.HTTP_200_OK)
- @mock.patch("documents.parsers.parse_date_generator")
+ @mock.patch("paperless.parsers.parse_date_generator")
@override_settings(NUMBER_OF_SUGGESTED_DATES=0)
def test_get_suggestions_dates_disabled(
self,
# Expect 0 document returned
self.assertEqual(len(results), 0)
- @mock.patch("documents.index.autocomplete")
+ @mock.patch("paperless.index.autocomplete")
def test_search_autocomplete_limits(self, m):
"""
GIVEN:
self.assertIsNotNone(response.data["tasks"]["index_last_modified"])
@override_settings(INDEX_DIR=Path("/tmp/index/"))
- @mock.patch("documents.index.open_index", autospec=True)
+ @mock.patch("paperless.index.open_index", autospec=True)
def test_system_status_index_error(self, mock_open_index):
"""
GIVEN:
)
self.assertEqual(groups_with_perms.count(), 2)
- @mock.patch("documents.models.Document.delete")
+ @mock.patch("paperless.models.Document.delete")
def test_delete_documents_old_uuid_field(self, m):
m.side_effect = Exception("Data too long for column 'transaction_id' at row 1")
doc_ids = [self.doc1.id, self.doc2.id, self.doc3.id]
PASSPHRASE="test",
)
@mock.patch("paperless.db.GnuPG.decrypted")
- @mock.patch("documents.models.Document.source_file")
+ @mock.patch("paperless.models.Document.source_file")
def test_encrypted_decrypt_fails(self, mock_decrypted, mock_source_file):
mock_decrypted.return_value = None
mock_source_file.return_value = b""
def test_parser_check(self):
self.assertEqual(parser_check(None), [])
- with mock.patch("documents.checks.document_consumer_declaration.send") as m:
+ with mock.patch("paperless.checks.document_consumer_declaration.send") as m:
m.return_value = []
self.assertEqual(
current_ver = DocumentClassifier.FORMAT_VERSION
with mock.patch(
- "documents.classifier.DocumentClassifier.FORMAT_VERSION",
+ "paperless.classifier.DocumentClassifier.FORMAT_VERSION",
current_ver + 1,
):
# assure that we won't load old classifiers.
self.assertCountEqual(new_classifier.predict_tags(self.doc2.content), [45, 12])
- @mock.patch("documents.classifier.pickle.load")
+ @mock.patch("paperless.classifier.pickle.load")
def test_load_corrupt_file(self, patched_pickle_load: mock.MagicMock):
"""
GIVEN:
self.assertFalse(Path(settings.MODEL_FILE).exists())
self.assertIsNone(load_classifier())
- @mock.patch("documents.classifier.DocumentClassifier.load")
+ @mock.patch("paperless.classifier.DocumentClassifier.load")
def test_load_classifier(self, load):
Path(settings.MODEL_FILE).touch()
self.assertIsNotNone(load_classifier())
classifier = load_classifier()
self.assertIsNotNone(classifier)
- with mock.patch("documents.classifier.DocumentClassifier.load") as load:
+ with mock.patch("paperless.classifier.DocumentClassifier.load") as load:
load_classifier()
load.assert_not_called()
- @mock.patch("documents.classifier.DocumentClassifier.load")
+ @mock.patch("paperless.classifier.DocumentClassifier.load")
def test_load_classifier_incompatible_version(self, load):
Path(settings.MODEL_FILE).touch()
self.assertTrue(Path(settings.MODEL_FILE).exists())
self.assertIsNone(load_classifier())
self.assertFalse(Path(settings.MODEL_FILE).exists())
- @mock.patch("documents.classifier.DocumentClassifier.load")
+ @mock.patch("paperless.classifier.DocumentClassifier.load")
def test_load_classifier_os_error(self, load):
Path(settings.MODEL_FILE).touch()
self.assertTrue(Path(settings.MODEL_FILE).exists())
classifier = load_classifier()
self.assertIsNone(classifier)
- @mock.patch("documents.classifier.DocumentClassifier.load")
+ @mock.patch("paperless.classifier.DocumentClassifier.load")
def test_load_classifier_raise_exception(self, mock_load):
Path(settings.MODEL_FILE).touch()
mock_load.side_effect = IncompatibleClassifierVersionError("Dummy Error")
return "A verbose string that describes the contents of the file"
-@mock.patch("documents.consumer.magic.from_file", fake_magic_from_file)
+@mock.patch("paperless.consumer.magic.from_file", fake_magic_from_file)
class TestConsumer(
DirectoriesMixin,
FileSystemAssertsMixin,
def setUp(self):
super().setUp()
- patcher = mock.patch("documents.parsers.document_consumer_declaration.send")
+ patcher = mock.patch("paperless.parsers.document_consumer_declaration.send")
m = patcher.start()
m.return_value = [
(
with self.assertRaisesMessage(ConsumerError, "document is in the trash"):
consumer.run()
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def testNoParsers(self, m):
m.return_value = []
self._assert_first_last_send_progress(last_status="FAILED")
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def testFaultyParser(self, m):
m.return_value = [
(
self._assert_first_last_send_progress(last_status="FAILED")
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def testGenericParserException(self, m):
m.return_value = [
(
self._assert_first_last_send_progress(last_status="FAILED")
- @mock.patch("documents.consumer.ConsumerPlugin._write")
+ @mock.patch("paperless.consumer.ConsumerPlugin._write")
def testPostSaveError(self, m):
filename = self.get_test_file()
m.side_effect = OSError("NO.")
self._assert_first_last_send_progress()
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
- @mock.patch("documents.signals.handlers.generate_unique_filename")
+ @mock.patch("paperless.signals.handlers.generate_unique_filename")
def testFilenameHandlingUnstableFormat(self, m):
filenames = ["this", "that", "now this", "i cannot decide"]
self._assert_first_last_send_progress()
- @mock.patch("documents.consumer.load_classifier")
+ @mock.patch("paperless.consumer.load_classifier")
def testClassifyDocument(self, m):
correspondent = Correspondent.objects.create(
name="test",
self._assert_first_last_send_progress(last_status="FAILED")
@override_settings(FILENAME_FORMAT="{title}")
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def test_similar_filenames(self, m):
shutil.copy(
Path(__file__).parent / "samples" / "simple.pdf",
sanity_check()
- @mock.patch("documents.consumer.run_subprocess")
+ @mock.patch("paperless.consumer.run_subprocess")
def test_try_to_clean_invalid_pdf(self, m):
shutil.copy(
Path(__file__).parent / "samples" / "invalid_pdf.pdf",
@mock.patch("paperless_mail.models.MailRule.objects.get")
@mock.patch("paperless_mail.parsers.MailDocumentParser.parse")
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def test_mail_parser_receives_mailrule(
self,
mock_consumer_declaration_send: mock.Mock,
)
-@mock.patch("documents.consumer.magic.from_file", fake_magic_from_file)
+@mock.patch("paperless.consumer.magic.from_file", fake_magic_from_file)
class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
def setUp(self):
super().setUp()
self.test_file = self.dirs.scratch_dir / "sample.pdf"
shutil.copy(src, self.test_file)
- @mock.patch("documents.consumer.run_subprocess")
+ @mock.patch("paperless.consumer.run_subprocess")
@override_settings(PRE_CONSUME_SCRIPT=None)
def test_no_pre_consume_script(self, m):
with self.get_consumer(self.test_file) as c:
c.run()
m.assert_not_called()
- @mock.patch("documents.consumer.run_subprocess")
+ @mock.patch("paperless.consumer.run_subprocess")
@override_settings(PRE_CONSUME_SCRIPT="does-not-exist")
def test_pre_consume_script_not_found(self, m):
with self.get_consumer(self.test_file) as c:
self.assertRaises(ConsumerError, c.run)
m.assert_not_called()
- @mock.patch("documents.consumer.run_subprocess")
+ @mock.patch("paperless.consumer.run_subprocess")
def test_pre_consume_script(self, m):
with tempfile.NamedTemporaryFile() as script:
with override_settings(PRE_CONSUME_SCRIPT=script.name):
self.test_file = self.dirs.scratch_dir / "sample.pdf"
shutil.copy(src, self.test_file)
- @mock.patch("documents.consumer.run_subprocess")
+ @mock.patch("paperless.consumer.run_subprocess")
@override_settings(POST_CONSUME_SCRIPT=None)
def test_no_post_consume_script(self, m):
doc = Document.objects.create(title="Test", mime_type="application/pdf")
):
consumer.run_post_consume_script(doc)
- @mock.patch("documents.consumer.run_subprocess")
+ @mock.patch("paperless.consumer.run_subprocess")
def test_post_consume_script_simple(self, m):
with tempfile.NamedTemporaryFile() as script:
with override_settings(POST_CONSUME_SCRIPT=script.name):
m.assert_called_once()
- @mock.patch("documents.consumer.run_subprocess")
+ @mock.patch("paperless.consumer.run_subprocess")
def test_post_consume_script_with_correspondent(self, m):
with tempfile.NamedTemporaryFile() as script:
with override_settings(POST_CONSUME_SCRIPT=script.name):
Path(file_path).touch()
Path(thumb_path).touch()
- with mock.patch("documents.signals.handlers.os.unlink") as mock_unlink:
+ with mock.patch("paperless.signals.handlers.os.unlink") as mock_unlink:
document.delete()
empty_trash([document.pk])
mock_unlink.assert_any_call(file_path)
Path(file_path).touch()
Path(thumb_path).touch()
- with mock.patch("documents.signals.handlers.os.unlink") as mock_unlink:
+ with mock.patch("paperless.signals.handlers.os.unlink") as mock_unlink:
document.delete()
self.assertEqual(mock_unlink.call_count, 0)
with (
mock.patch(
- "documents.signals.handlers.Document.global_objects.filter",
+ "paperless.signals.handlers.Document.global_objects.filter",
) as m,
disable_auditlog(),
):
self.assertEqual(document2.filename, "qwe.pdf")
@override_settings(FILENAME_FORMAT="{title}")
- @mock.patch("documents.signals.handlers.Document.objects.filter")
- @mock.patch("documents.signals.handlers.shutil.move")
+ @mock.patch("paperless.signals.handlers.Document.objects.filter")
+ @mock.patch("paperless.signals.handlers.shutil.move")
def test_no_move_only_save(self, mock_move, mock_filter):
"""
GIVEN:
@override_settings(
FILENAME_FORMAT="{{title}}_{{custom_fields|get_cf_value('test')}}",
)
- @mock.patch("documents.signals.handlers.update_filename_and_move_files")
+ @mock.patch("paperless.signals.handlers.update_filename_and_move_files")
def test_select_cf_updated(self, m):
"""
GIVEN:
self.assertIsFile(doc.archive_path)
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
- @mock.patch("documents.signals.handlers.shutil.move")
+ @mock.patch("paperless.signals.handlers.shutil.move")
def test_move_archive_error(self, m):
def fake_rename(src, dst):
if "archive" in str(src):
self.assertIsFile(doc.archive_path)
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
- @mock.patch("documents.signals.handlers.shutil.move")
+ @mock.patch("paperless.signals.handlers.shutil.move")
def test_move_file_error(self, m):
def fake_rename(src, dst):
if "original" in str(src):
archive_checksum="B",
)
with mock.patch(
- "documents.signals.handlers.Document.global_objects.filter",
+ "paperless.signals.handlers.Document.global_objects.filter",
) as m:
m.side_effect = DatabaseError()
doc.save()
)
with self.assertLogs("paperless.index", level="ERROR") as cm:
with mock.patch(
- "documents.index.AsyncWriter.update_document",
+ "paperless.index.AsyncWriter.update_document",
) as mocked_update_doc:
index.add_or_update_document(doc1)
content="test test2 test3",
)
with mock.patch(
- "documents.index.AsyncWriter.update_document",
+ "paperless.index.AsyncWriter.update_document",
) as mocked_update_doc:
index.add_or_update_document(doc1)
class TestParserDiscovery(TestCase):
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def test_get_parser_class_1_parser(self, m, *args):
"""
GIVEN:
self.assertEqual(get_parser_class_for_mime_type("application/pdf"), DummyParser)
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def test_get_parser_class_n_parsers(self, m, *args):
"""
GIVEN:
DummyParser2,
)
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def test_get_parser_class_0_parsers(self, m, *args):
"""
GIVEN:
with TemporaryDirectory():
self.assertIsNone(get_parser_class_for_mime_type("application/pdf"))
- @mock.patch("documents.parsers.document_consumer_declaration.send")
+ @mock.patch("paperless.parsers.document_consumer_declaration.send")
def test_get_parser_class_no_valid_parser(self, m, *args):
"""
GIVEN:
from paperless.tests.utils import DirectoriesMixin
-@mock.patch("documents.consumer.magic.from_file", fake_magic_from_file)
+@mock.patch("paperless.consumer.magic.from_file", fake_magic_from_file)
class TestTaskSignalHandler(DirectoriesMixin, TestCase):
def util_call_before_task_publish_handler(self, headers_to_use, body_to_use):
"""
self.assertIsNotFile(settings.MODEL_FILE)
with mock.patch(
- "documents.classifier.DocumentClassifier.preprocess_content",
+ "paperless.classifier.DocumentClassifier.preprocess_content",
) as pre_proc_mock:
pre_proc_mock.side_effect = dummy_preprocess
doc.refresh_from_db()
self.assertEqual(doc.owner, self.user2)
- @mock.patch("documents.models.Document.objects.filter", autospec=True)
+ @mock.patch("paperless.models.Document.objects.filter", autospec=True)
def test_workflow_scheduled_trigger_modified(self, mock_filter):
"""
GIVEN:
@override_settings(
PAPERLESS_URL="http://localhost:8000",
)
- @mock.patch("documents.signals.handlers.send_webhook.delay")
+ @mock.patch("paperless.signals.handlers.send_webhook.delay")
def test_workflow_webhook_action_body(self, mock_post):
"""
GIVEN:
@override_settings(
PAPERLESS_URL="http://localhost:8000",
)
- @mock.patch("documents.signals.handlers.send_webhook.delay")
+ @mock.patch("paperless.signals.handlers.send_webhook.delay")
def test_workflow_webhook_action_w_files(self, mock_post):
"""
GIVEN:
)
self.assertIn(expected_str, cm.output[0])
- @mock.patch("documents.signals.handlers.send_webhook.delay")
+ @mock.patch("paperless.signals.handlers.send_webhook.delay")
def test_workflow_webhook_action_consumption(self, mock_post):
"""
GIVEN:
def setUp(self) -> None:
self.send_progress_patcher = mock.patch(
- "documents.consumer.Consumer._send_progress",
+ "paperless.consumer.Consumer._send_progress",
)
self.send_progress_mock = self.send_progress_patcher.start()
super().setUp()
)
self.assertIsFile(thumb)
- @mock.patch("documents.parsers.run_convert")
+ @mock.patch("paperless.parsers.run_convert")
def test_thumbnail_fallback(self, m):
def call_convert(input_file, output_file, **kwargs):
if ".pdf" in input_file: