Fix (dev): resolve tantivy search-filtered documents in bulk edit (#12705)

This commit is contained in:
shamoon
2026-05-04 14:34:08 -07:00
committed by GitHub
parent 1b08417062
commit a76b6b826c
3 changed files with 184 additions and 34 deletions
+75
View File
@@ -671,6 +671,81 @@ class TestBulkEditAPI(DirectoriesMixin, APITestCase):
self.assertEqual(args[0], [self.doc2.id])
self.assertEqual(kwargs["storage_path"], self.sp1.id)
@mock.patch("documents.search.get_backend")
@mock.patch("documents.serialisers.bulk_edit.set_storage_path")
def test_api_bulk_edit_with_all_true_resolves_documents_from_search_filters(
self,
m,
get_backend,
) -> None:
self.setup_mock(m, "set_storage_path")
for filters in (
{"text": "new doc 2017-03-16"},
{"title_search": "apple"},
):
with self.subTest(filters=filters):
get_backend.return_value.search_ids.return_value = [self.doc2.id]
response = self.client.post(
"/api/documents/bulk_edit/",
json.dumps(
{
"all": True,
"filters": filters,
"method": "set_storage_path",
"parameters": {"storage_path": self.sp1.id},
},
),
content_type="application/json",
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
get_backend.return_value.search_ids.assert_called_once()
args, kwargs = m.call_args
self.assertEqual(args[0], [self.doc2.id])
self.assertEqual(kwargs["storage_path"], self.sp1.id)
m.reset_mock()
get_backend.return_value.search_ids.reset_mock()
# more_like_id is a different path
get_backend.return_value.more_like_this_ids.return_value = [self.doc2.id]
response = self.client.post(
"/api/documents/bulk_edit/",
json.dumps(
{
"all": True,
"filters": {"more_like_id": self.doc1.id},
"method": "set_storage_path",
"parameters": {"storage_path": self.sp1.id},
},
),
content_type="application/json",
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
get_backend.return_value.more_like_this_ids.assert_called_once()
def test_api_bulk_edit_with_all_true_rejects_multiple_filters(self) -> None:
response = self.client.post(
"/api/documents/bulk_edit/",
json.dumps(
{
"all": True,
"filters": {
"text": "B",
"query": "c1",
},
"method": "set_storage_path",
"parameters": {"storage_path": self.sp1.id},
},
),
content_type="application/json",
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn(b"Specify only one of", response.content)
def test_api_bulk_edit_with_all_true_rejects_unsupported_methods(self) -> None:
response = self.client.post(
"/api/documents/bulk_edit/",