From 36d45ecf4d68502abd494053ac13ae44226f185a Mon Sep 17 00:00:00 2001 From: Ed Bardsley Date: Tue, 18 Nov 2025 10:28:43 -0800 Subject: [PATCH] Development: fix unreachable code around assertRaises blocks (#11365) * tests: general cleanup and fixes for runnning under docker This now allows tests to be run under a locally built or production docker image with something like: `docker run --rm -v $PWD:/usr/src/paperless --entrypoint=bash paperlessngx/paperless-ngx:latest -c "uv run pytest"` Specific fixes: - fix unreachable code around `assertRaises` blocks - fix `assertInt` typos - fix `str(e)` vs `str(e.exception)` issues - skip permission-based checks when root (in a docker container) - catch `OSError` problems when instantiating `INotify` and skip inotify-based tests when it's unavailable. * Reverts most files to dev while keeping the exception assert fixes --------- Co-authored-by: Trenton H <797416+stumpylog@users.noreply.github.com> --- .../tests/test_management_exporter.py | 9 +++-- src/documents/tests/test_management_fuzzy.py | 6 ++-- .../tests/test_management_importer.py | 35 +++++++++---------- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index a67e5e8c5..b01b8d47e 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -571,7 +571,7 @@ class TestExportImport( with self.assertRaises(CommandError) as e: call_command(*args) - self.assertEqual("That path isn't a directory", str(e)) + self.assertEqual("That path doesn't exist", str(e.exception)) def test_export_target_exists_but_is_file(self): """ @@ -589,7 +589,7 @@ class TestExportImport( with self.assertRaises(CommandError) as e: call_command(*args) - self.assertEqual("That path isn't a directory", str(e)) + self.assertEqual("That path isn't a directory", str(e.exception)) def test_export_target_not_writable(self): """ @@ -608,7 +608,10 @@ class TestExportImport( with self.assertRaises(CommandError) as e: call_command(*args) - self.assertEqual("That path doesn't appear to be writable", str(e)) + self.assertEqual( + "That path doesn't appear to be writable", + str(e.exception), + ) def test_no_archive(self): """ diff --git a/src/documents/tests/test_management_fuzzy.py b/src/documents/tests/test_management_fuzzy.py index 453a86082..2a4f28025 100644 --- a/src/documents/tests/test_management_fuzzy.py +++ b/src/documents/tests/test_management_fuzzy.py @@ -34,7 +34,7 @@ class TestFuzzyMatchCommand(TestCase): """ with self.assertRaises(CommandError) as e: self.call_command("--ratio", "-1") - self.assertIn("The ratio must be between 0 and 100", str(e)) + self.assertIn("The ratio must be between 0 and 100", str(e.exception)) def test_invalid_ratio_upper_limit(self): """ @@ -47,7 +47,7 @@ class TestFuzzyMatchCommand(TestCase): """ with self.assertRaises(CommandError) as e: self.call_command("--ratio", "101") - self.assertIn("The ratio must be between 0 and 100", str(e)) + self.assertIn("The ratio must be between 0 and 100", str(e.exception)) def test_invalid_process_count(self): """ @@ -60,7 +60,7 @@ class TestFuzzyMatchCommand(TestCase): """ with self.assertRaises(CommandError) as e: self.call_command("--processes", "0") - self.assertIn("There must be at least 1 process", str(e)) + self.assertIn("There must be at least 1 process", str(e.exception)) def test_no_matches(self): """ diff --git a/src/documents/tests/test_management_importer.py b/src/documents/tests/test_management_importer.py index e700ecdc9..004f5ac5f 100644 --- a/src/documents/tests/test_management_importer.py +++ b/src/documents/tests/test_management_importer.py @@ -40,10 +40,10 @@ class TestCommandImport( "--no-progress-bar", str(self.dirs.scratch_dir), ) - self.assertIn( - "That directory doesn't appear to contain a manifest.json file.", - str(e), - ) + self.assertIn( + "That directory doesn't appear to contain a manifest.json file.", + str(e.exception), + ) def test_check_manifest_malformed(self): """ @@ -66,10 +66,10 @@ class TestCommandImport( "--no-progress-bar", str(self.dirs.scratch_dir), ) - self.assertIn( - "The manifest file contains a record which does not refer to an actual document file.", - str(e), - ) + self.assertIn( + "The manifest file contains a record which does not refer to an actual document file.", + str(e.exception), + ) def test_check_manifest_file_not_found(self): """ @@ -95,7 +95,7 @@ class TestCommandImport( "--no-progress-bar", str(self.dirs.scratch_dir), ) - self.assertIn('The manifest file refers to "noexist.pdf"', str(e)) + self.assertIn('The manifest file refers to "noexist.pdf"', str(e.exception)) def test_import_permission_error(self): """ @@ -129,14 +129,14 @@ class TestCommandImport( cmd.data_only = False with self.assertRaises(CommandError) as cm: cmd.check_manifest_validity() - self.assertInt("Failed to read from original file", str(cm.exception)) + self.assertIn("Failed to read from original file", str(cm.exception)) original_path.chmod(0o444) archive_path.chmod(0o222) with self.assertRaises(CommandError) as cm: cmd.check_manifest_validity() - self.assertInt("Failed to read from archive file", str(cm.exception)) + self.assertIn("Failed to read from archive file", str(cm.exception)) def test_import_source_not_existing(self): """ @@ -149,7 +149,7 @@ class TestCommandImport( """ with self.assertRaises(CommandError) as cm: call_command("document_importer", Path("/tmp/notapath")) - self.assertInt("That path doesn't exist", str(cm.exception)) + self.assertIn("That path doesn't exist", str(cm.exception)) def test_import_source_not_readable(self): """ @@ -165,10 +165,10 @@ class TestCommandImport( path.chmod(0o222) with self.assertRaises(CommandError) as cm: call_command("document_importer", path) - self.assertInt( - "That path doesn't appear to be readable", - str(cm.exception), - ) + self.assertIn( + "That path doesn't appear to be readable", + str(cm.exception), + ) def test_import_source_does_not_exist(self): """ @@ -185,8 +185,7 @@ class TestCommandImport( with self.assertRaises(CommandError) as e: call_command("document_importer", "--no-progress-bar", str(path)) - - self.assertIn("That path doesn't exist", str(e)) + self.assertIn("That path doesn't exist", str(e.exception)) def test_import_files_exist(self): """