Fix: also ensure symmetric doc link removal on bulk edit

This commit is contained in:
shamoon 2025-01-30 14:19:52 -08:00
parent cf7422346a
commit dcf40ba5eb
2 changed files with 38 additions and 14 deletions

View File

@ -178,12 +178,25 @@ def modify_custom_fields(
field_id=field_id,
defaults=defaults,
)
if (
custom_field.data_type == CustomField.FieldDataType.DOCUMENTLINK
and value
):
if custom_field.data_type == CustomField.FieldDataType.DOCUMENTLINK:
doc = Document.objects.get(id=doc_id)
reflect_doclinks(doc, custom_field, value)
remove_fields = CustomField.objects.filter(id__in=remove_custom_fields).distinct()
for remove_field in remove_fields:
if remove_field.data_type == CustomField.FieldDataType.DOCUMENTLINK:
# Remove symmetrical links from target documents
for doc_id in affected_docs:
target_doc_instance = CustomFieldInstance.objects.filter(
document_id=doc_id,
field=remove_field,
).first()
if target_doc_instance and target_doc_instance.value:
for target_doc_id in target_doc_instance.value:
remove_doclink(
document=Document.objects.get(id=doc_id),
field=remove_field,
target_doc_id=target_doc_id,
)
CustomFieldInstance.objects.filter(
document_id__in=affected_docs,
field_id__in=remove_custom_fields,

View File

@ -282,14 +282,9 @@ class TestBulkEdit(DirectoriesMixin, TestCase):
document=self.doc2,
field=cf3,
)
doc3: Document = Document.objects.create(
title="doc3",
content="content",
checksum="D3",
)
bulk_edit.modify_custom_fields(
[self.doc1.id, self.doc2.id],
add_custom_fields={cf2.id: None, cf3.id: [doc3.id]},
add_custom_fields={cf2.id: None, cf3.id: [self.doc3.id]},
remove_custom_fields=[cf.id],
)
@ -306,7 +301,7 @@ class TestBulkEdit(DirectoriesMixin, TestCase):
)
self.assertEqual(
self.doc1.custom_fields.get(field=cf3).value,
[doc3.id],
[self.doc3.id],
)
self.assertEqual(
self.doc2.custom_fields.count(),
@ -314,12 +309,12 @@ class TestBulkEdit(DirectoriesMixin, TestCase):
)
self.assertEqual(
self.doc2.custom_fields.get(field=cf3).value,
[doc3.id],
[self.doc3.id],
)
# assert reflect document link
doc3.refresh_from_db()
self.doc3.refresh_from_db()
self.assertEqual(
doc3.custom_fields.first().value,
self.doc3.custom_fields.first().value,
[self.doc2.id, self.doc1.id],
)
@ -327,6 +322,22 @@ class TestBulkEdit(DirectoriesMixin, TestCase):
args, kwargs = self.async_task.call_args
self.assertCountEqual(kwargs["document_ids"], [self.doc1.id, self.doc2.id])
# removal of document link cf, should also remove symmetric link
bulk_edit.modify_custom_fields(
[self.doc3.id],
add_custom_fields={},
remove_custom_fields=[cf3.id],
)
self.doc1.refresh_from_db()
self.assertNotIn(
self.doc3.id,
self.doc1.custom_fields.filter(field=cf3).first().value,
)
self.assertNotIn(
self.doc3.id,
self.doc2.custom_fields.filter(field=cf3).first().value,
)
def test_delete(self):
self.assertEqual(Document.objects.count(), 5)
bulk_edit.delete([self.doc1.id, self.doc2.id])