]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix: always update document modified property on bulk edit operations (#7079)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Sun, 23 Jun 2024 19:11:24 +0000 (12:11 -0700)
committerGitHub <noreply@github.com>
Sun, 23 Jun 2024 19:11:24 +0000 (12:11 -0700)
src/documents/signals/handlers.py
src/documents/tests/test_file_handling.py

index 02f08ab31d1676699e94795885c7dcc6c7512a53..21aef4cb62bea46fe8f0204aa36dfc1fbd7634db 100644 (file)
@@ -418,7 +418,10 @@ def update_filename_and_move_files(sender, instance: Document, **kwargs):
                 move_archive = False
 
             if not move_original and not move_archive:
-                # Don't do anything if filenames did not change.
+                # Just update modified. Also, don't save() here to prevent infinite recursion.
+                Document.objects.filter(pk=instance.pk).update(
+                    modified=timezone.now(),
+                )
                 return
 
             if move_original:
index dd2c59f071b93baf647c91d2904a207093a28ec6..e13cd866d4393dc42aa99d578640c82c8014cab8 100644 (file)
@@ -573,7 +573,19 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
 
     @override_settings(FILENAME_FORMAT="{title}")
     @mock.patch("documents.signals.handlers.Document.objects.filter")
-    def test_no_update_without_change(self, m):
+    @mock.patch("documents.signals.handlers.shutil.move")
+    def test_no_move_only_save(self, mock_move, mock_filter):
+        """
+        GIVEN:
+            - A document with a filename
+            - The document is saved
+            - The filename is not changed
+        WHEN:
+            - The document is saved
+        THEN:
+            - The document modified date is updated
+            - The document is not moved
+        """
         with disable_auditlog():
             doc = Document.objects.create(
                 title="document",
@@ -583,12 +595,16 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
                 archive_checksum="B",
                 mime_type="application/pdf",
             )
+            original_modified = doc.modified
             Path(doc.source_path).touch()
             Path(doc.archive_path).touch()
 
             doc.save()
+            doc.refresh_from_db()
 
-            m.assert_not_called()
+            mock_filter.assert_called()
+            self.assertNotEqual(original_modified, doc.modified)
+            mock_move.assert_not_called()
 
 
 class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, TestCase):