From 60319c6d3709718e4d079ca7cd7ebf1394d3422a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 9 Mar 2026 19:32:46 -0700 Subject: [PATCH 1/5] Fix: prevent stale db filename during workflow actions (#12289) --- src/documents/signals/handlers.py | 2 + src/documents/tests/test_workflows.py | 58 +++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 591d235bd..5be8855e6 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -833,6 +833,8 @@ def run_workflows( if not use_overrides: # limit title to 128 characters document.title = document.title[:128] + # Make sure the filename and archive filename are accurate + document.refresh_from_db(fields=["filename", "archive_filename"]) # save first before setting tags document.save() document.tags.set(doc_tag_ids) diff --git a/src/documents/tests/test_workflows.py b/src/documents/tests/test_workflows.py index deb40a165..ba1e72e1f 100644 --- a/src/documents/tests/test_workflows.py +++ b/src/documents/tests/test_workflows.py @@ -25,6 +25,7 @@ from rest_framework.test import APIClient from rest_framework.test import APITestCase from documents.file_handling import create_source_path_directory +from documents.file_handling import generate_filename from documents.file_handling import generate_unique_filename from documents.signals.handlers import run_workflows from documents.workflows.webhooks import send_webhook @@ -898,6 +899,63 @@ class TestWorkflows( expected_str = f"Document matched {trigger} from {w}" self.assertIn(expected_str, cm.output[0]) + def test_workflow_assign_custom_field_keeps_storage_filename_in_sync(self) -> None: + """ + GIVEN: + - Existing document with a storage path template that depends on a custom field + - Existing workflow triggered on document update assigning that custom field + WHEN: + - Workflow runs for the document + THEN: + - The database filename remains aligned with the moved file on disk + """ + storage_path = StoragePath.objects.create( + name="workflow-custom-field-path", + path="{{ custom_fields|get_cf_value('Custom Field 1', 'none') }}/{{ title }}", + ) + doc = Document.objects.create( + title="workflow custom field sync", + mime_type="application/pdf", + checksum="workflow-custom-field-sync", + storage_path=storage_path, + original_filename="workflow-custom-field-sync.pdf", + ) + CustomFieldInstance.objects.create( + document=doc, + field=self.cf1, + value_text="initial", + ) + + generated = generate_unique_filename(doc) + destination = (settings.ORIGINALS_DIR / generated).resolve() + create_source_path_directory(destination) + shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination) + Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix()) + doc.refresh_from_db() + + trigger = WorkflowTrigger.objects.create( + type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED, + ) + action = WorkflowAction.objects.create( + type=WorkflowAction.WorkflowActionType.ASSIGNMENT, + assign_custom_fields_values={self.cf1.pk: "cars"}, + ) + action.assign_custom_fields.add(self.cf1.pk) + workflow = Workflow.objects.create( + name="Workflow custom field filename sync", + order=0, + ) + workflow.triggers.add(trigger) + workflow.actions.add(action) + workflow.save() + + run_workflows(WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED, doc) + + doc.refresh_from_db() + expected_filename = generate_filename(doc) + self.assertEqual(Path(doc.filename), expected_filename) + self.assertTrue(doc.source_path.is_file()) + def test_document_added_workflow(self): trigger = WorkflowTrigger.objects.create( type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_ADDED, From ba0a80a8ad04e9dc2e1ae1d83d556c2a2d2f629c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 11 Mar 2026 07:39:32 -0700 Subject: [PATCH 2/5] Fix: prevent wrapping with larger amounts of tags on small cards, reset moreTags setting to correct count (#12302) --- .../document-card-small.component.html | 2 +- .../document-card-small.component.scss | 10 ++++++++++ .../document-card-small.component.spec.ts | 10 ++++++++++ .../document-card-small.component.ts | 1 + 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index b154324c7..b3a29aed4 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -15,7 +15,7 @@ } @if (document && displayFields?.includes(DisplayField.TAGS)) { -