From 2354f87a4096c0adc6e2dad1d9ae4ae7823d3eec Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 7 May 2026 10:07:35 -0700 Subject: [PATCH] Fixes trash preview when a document has deleted versions (#12742) --- src/documents/tests/test_api_documents.py | 36 +++++++++++++++++++++++ src/documents/views.py | 4 +-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/documents/tests/test_api_documents.py b/src/documents/tests/test_api_documents.py index 34c501192..98908b80e 100644 --- a/src/documents/tests/test_api_documents.py +++ b/src/documents/tests/test_api_documents.py @@ -485,6 +485,42 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): response = self.client.get(f"/api/documents/{doc.pk}/thumb/") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + def test_document_actions_trashed_document(self) -> None: + """ + GIVEN: + - Document with files exists + WHEN: + - Document is soft-deleted (moved to trash) + - Preview and thumb endpoints are requested + THEN: + - HTTP 200 OK for both (trashed documents remain previewable) + """ + _, filename = tempfile.mkstemp(dir=self.dirs.originals_dir) + content = b"This is a test" + content_thumbnail = b"thumbnail content" + + with Path(filename).open("wb") as f: + f.write(content) + + doc = Document.objects.create( + title="none", + filename=Path(filename).name, + mime_type="application/pdf", + ) + + with (self.dirs.thumbnail_dir / f"{doc.pk:07d}.webp").open("wb") as f: + f.write(content_thumbnail) + + doc.delete() + + response = self.client.get(f"/api/documents/{doc.pk}/preview/") + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(read_streaming_response(response), content) + + response = self.client.get(f"/api/documents/{doc.pk}/thumb/") + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(read_streaming_response(response), content_thumbnail) + def test_document_history_action(self) -> None: """ GIVEN: diff --git a/src/documents/views.py b/src/documents/views.py index a60bbc30e..59c3399fc 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -1542,7 +1542,7 @@ class DocumentViewSet( condition(etag_func=preview_etag, last_modified_func=preview_last_modified), ) def preview(self, request, pk=None): - resolved = self._resolve_request_and_root_doc(pk, request) + resolved = self._resolve_request_and_root_doc(pk, request, include_deleted=True) if isinstance(resolved, HttpResponseForbidden): return resolved @@ -1566,7 +1566,7 @@ class DocumentViewSet( @method_decorator(cache_control(no_cache=True)) @method_decorator(last_modified(thumbnail_last_modified)) def thumb(self, request, pk=None): - resolved = self._resolve_request_and_root_doc(pk, request) + resolved = self._resolve_request_and_root_doc(pk, request, include_deleted=True) if isinstance(resolved, HttpResponseForbidden): return resolved