From df203311fe5a0d2c1c8541e1626c7744e2c22611 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 4 May 2023 02:07:30 -0700 Subject: [PATCH] Fix note sorting, testing, bump search index version --- docker/docker-prepare.sh | 2 +- src/documents/index.py | 3 +++ src/documents/tests/test_api.py | 27 +++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docker/docker-prepare.sh b/docker/docker-prepare.sh index d6eab4281..9cf41d42c 100755 --- a/docker/docker-prepare.sh +++ b/docker/docker-prepare.sh @@ -80,7 +80,7 @@ django_checks() { search_index() { - local -r index_version=4 + local -r index_version=5 local -r index_version_file=${DATA_DIR}/.index_version if [[ (! -f "${index_version_file}") || $(<"${index_version_file}") != "$index_version" ]]; then diff --git a/src/documents/index.py b/src/documents/index.py index 594096bfa..0b0493514 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -54,6 +54,7 @@ def get_schema(): path_id=NUMERIC(), has_path=BOOLEAN(), notes=TEXT(), + num_notes=NUMERIC(sortable=True, signed=False), owner=TEXT(), owner_id=NUMERIC(), has_owner=BOOLEAN(), @@ -138,6 +139,7 @@ def update_document(writer: AsyncWriter, doc: Document): path_id=doc.storage_path.id if doc.storage_path else None, has_path=doc.storage_path is not None, notes=notes, + num_notes=len(notes), owner=doc.owner.username if doc.owner else None, owner_id=doc.owner.id if doc.owner else None, has_owner=doc.owner is not None, @@ -266,6 +268,7 @@ class DelayedQuery: "correspondent__name": "correspondent", "document_type__name": "type", "archive_serial_number": "asn", + "num_notes": "num_notes", } if field.startswith("-"): diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index b9989ee86..e8c6dee7c 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -1150,6 +1150,8 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): self.assertEqual(r.data["count"], 4) def test_search_sorting(self): + u1 = User.objects.create_user("user1") + u2 = User.objects.create_user("user2") c1 = Correspondent.objects.create(name="corres Ax") c2 = Correspondent.objects.create(name="corres Cx") c3 = Correspondent.objects.create(name="corres Bx") @@ -1159,6 +1161,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): content="test", archive_serial_number=2, title="3", + owner=u1, ) d2 = Document.objects.create( checksum="2", @@ -1166,6 +1169,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): content="test", archive_serial_number=3, title="2", + owner=u2, ) d3 = Document.objects.create( checksum="3", @@ -1174,6 +1178,21 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): archive_serial_number=1, title="1", ) + Note.objects.create( + note="This is a note.", + document=d1, + user=u1, + ) + Note.objects.create( + note="This is a note.", + document=d1, + user=u1, + ) + Note.objects.create( + note="This is a note.", + document=d3, + user=u1, + ) with AsyncWriter(index.open_index()) as writer: for doc in Document.objects.all(): @@ -1202,6 +1221,14 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): search_query("&ordering=-correspondent__name"), [d2.id, d3.id, d1.id], ) + self.assertListEqual( + search_query("&ordering=num_notes"), + [d2.id, d3.id, d1.id], + ) + self.assertListEqual( + search_query("&ordering=-num_notes"), + [d1.id, d3.id, d2.id], + ) def test_statistics(self): doc1 = Document.objects.create(