From 13382c2a91d626f19c4461ae39f1f86e70c306d2 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:05:52 -0700 Subject: [PATCH] Add some tests for this new version doesnt follow id --- .../tests/test_api_document_versions.py | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/documents/tests/test_api_document_versions.py b/src/documents/tests/test_api_document_versions.py index 38aa78706..41822af71 100644 --- a/src/documents/tests/test_api_document_versions.py +++ b/src/documents/tests/test_api_document_versions.py @@ -827,6 +827,67 @@ class TestDocumentVersioningApi(DirectoriesMixin, APITestCase): self.assertEqual(resp.status_code, status.HTTP_200_OK) self.assertEqual(resp.data["content"], "v1-content") + def _make_root_with_out_of_order_versions(self) -> tuple[Document, ...]: + """ + A root whose newest version has a *lower* id than an older one, which is + what merging an existing document in as a version produces. + """ + root = Document.objects.create( + title="root", + checksum="root", + mime_type="application/pdf", + content="root-content", + ) + newest = Document.objects.create( + title="newest", + checksum="newest", + mime_type="application/pdf", + content="newest-content", + ) + older = Document.objects.create( + title="older", + checksum="older", + mime_type="application/pdf", + root_document=root, + version_index=1, + content="older-content", + ) + # Assigned last, so `newest` has the lower id despite being the later version + newest.root_document = root + newest.version_index = 2 + newest.save() + return root, newest, older + + def test_retrieve_uses_version_index_not_id_for_latest(self) -> None: + root, _, _ = self._make_root_with_out_of_order_versions() + + resp = self.client.get(f"/api/documents/{root.id}/") + + self.assertEqual(resp.status_code, status.HTTP_200_OK) + self.assertEqual(resp.data["content"], "newest-content") + + def test_list_uses_version_index_not_id_for_latest(self) -> None: + self._make_root_with_out_of_order_versions() + + resp = self.client.get("/api/documents/?fields=id,content") + + self.assertEqual(resp.status_code, status.HTTP_200_OK) + self.assertEqual( + [doc["content"] for doc in resp.data["results"]], + ["newest-content"], + ) + + def test_versions_are_listed_newest_first_with_root_last(self) -> None: + root, newest, older = self._make_root_with_out_of_order_versions() + + resp = self.client.get(f"/api/documents/{root.id}/") + + self.assertEqual(resp.status_code, status.HTTP_200_OK) + self.assertEqual( + [(version["id"], version["is_root"]) for version in resp.data["versions"]], + [(newest.id, False), (older.id, False), (root.id, True)], + ) + class TestVersionAwareFilters(TestCase): def test_title_content_filter_falls_back_to_content(self) -> None: