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>
This commit is contained in:
Ed Bardsley
2025-11-18 10:28:43 -08:00
committed by GitHub
parent 4bf681387a
commit 36d45ecf4d
3 changed files with 26 additions and 24 deletions

View File

@@ -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):
"""

View File

@@ -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):
"""

View File

@@ -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):
"""