Enhancement: symmetric document links (#4907)

This commit is contained in:
shamoon
2023-12-19 13:43:50 -08:00
committed by GitHub
parent 5e361b0e81
commit 3e0c83750f
3 changed files with 207 additions and 3 deletions

View File

@@ -70,6 +70,12 @@ class TestCustomField(DirectoriesMixin, APITestCase):
checksum="123",
mime_type="application/pdf",
)
doc2 = Document.objects.create(
title="WOW2",
content="the content2",
checksum="1234",
mime_type="application/pdf",
)
custom_field_string = CustomField.objects.create(
name="Test Custom Field String",
data_type=CustomField.FieldDataType.STRING,
@@ -139,7 +145,7 @@ class TestCustomField(DirectoriesMixin, APITestCase):
},
{
"field": custom_field_documentlink.id,
"value": [1, 2, 3],
"value": [doc2.id],
},
],
},
@@ -160,7 +166,7 @@ class TestCustomField(DirectoriesMixin, APITestCase):
{"field": custom_field_url.id, "value": "https://example.com"},
{"field": custom_field_float.id, "value": 12.3456},
{"field": custom_field_monetary.id, "value": 11.10},
{"field": custom_field_documentlink.id, "value": [1, 2, 3]},
{"field": custom_field_documentlink.id, "value": [doc2.id]},
],
)
@@ -393,3 +399,111 @@ class TestCustomField(DirectoriesMixin, APITestCase):
self.assertEqual(CustomFieldInstance.objects.count(), 0)
self.assertEqual(len(doc.custom_fields.all()), 0)
def test_bidirectional_doclink_fields(self):
"""
GIVEN:
- Existing document
WHEN:
- Doc links are added or removed
THEN:
- Symmetrical link is created or removed as expected
"""
doc1 = Document.objects.create(
title="WOW1",
content="1",
checksum="1",
mime_type="application/pdf",
)
doc2 = Document.objects.create(
title="WOW2",
content="the content2",
checksum="2",
mime_type="application/pdf",
)
doc3 = Document.objects.create(
title="WOW3",
content="the content3",
checksum="3",
mime_type="application/pdf",
)
doc4 = Document.objects.create(
title="WOW4",
content="the content4",
checksum="4",
mime_type="application/pdf",
)
custom_field_doclink = CustomField.objects.create(
name="Test Custom Field Doc Link",
data_type=CustomField.FieldDataType.DOCUMENTLINK,
)
# Add links, creates bi-directional
resp = self.client.patch(
f"/api/documents/{doc1.id}/",
data={
"custom_fields": [
{
"field": custom_field_doclink.id,
"value": [2, 3, 4],
},
],
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(CustomFieldInstance.objects.count(), 4)
self.assertEqual(doc2.custom_fields.first().value, [1])
self.assertEqual(doc3.custom_fields.first().value, [1])
self.assertEqual(doc4.custom_fields.first().value, [1])
# Add links appends if necessary
resp = self.client.patch(
f"/api/documents/{doc3.id}/",
data={
"custom_fields": [
{
"field": custom_field_doclink.id,
"value": [1, 4],
},
],
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(doc4.custom_fields.first().value, [1, 3])
# Remove one of the links, removed on other doc
resp = self.client.patch(
f"/api/documents/{doc1.id}/",
data={
"custom_fields": [
{
"field": custom_field_doclink.id,
"value": [2, 3],
},
],
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(doc2.custom_fields.first().value, [1])
self.assertEqual(doc3.custom_fields.first().value, [1, 4])
self.assertEqual(doc4.custom_fields.first().value, [3])
# Removes the field entirely
resp = self.client.patch(
f"/api/documents/{doc1.id}/",
data={
"custom_fields": [],
},
format="json",
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(doc2.custom_fields.first().value, [])
self.assertEqual(doc3.custom_fields.first().value, [4])
self.assertEqual(doc4.custom_fields.first().value, [3])