Skip to content

Commit

Permalink
Merge pull request #1336 from open-zaak/issue/doc-empty-content
Browse files Browse the repository at this point in the history
fix update documents with empty content
  • Loading branch information
sergei-maertens committed Feb 21, 2023
2 parents 056deac + 656f5ed commit 372d5ac
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 3 deletions.
16 changes: 13 additions & 3 deletions src/openzaak/components/documenten/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ def validate(self, attrs):
valid_attrs = super().validate(attrs)

# check if file.size equal bestandsomvang
if self.instance is None: # create
if self.instance is None or not self.partial: # create and update PUT
if (
valid_attrs.get("inhoud") is not None
and "bestandsomvang" in valid_attrs
Expand All @@ -432,7 +432,7 @@ def validate(self, attrs):
and "bestandsomvang" not in valid_attrs
):
valid_attrs["bestandsomvang"] = valid_attrs["inhoud"].size
else: # update
else: # update PATCH
inhoud = get_from_serializer_data_or_instance("inhoud", valid_attrs, self)
bestandsomvang = get_from_serializer_data_or_instance(
"bestandsomvang", valid_attrs, self
Expand Down Expand Up @@ -543,11 +543,21 @@ def update(self, instance, validated_data):
) # integriteit and ondertekening can also be set to None
ondertekening = validated_data.pop("ondertekening", {}) or {}

# populate new version with previous version data only for PATCH
validated_data_field_names = validated_data.keys()
updatable_field_names = [
k for k, v in self.get_fields().items() if not v.read_only
]
for field in instance._meta.get_fields():
if field.name not in validated_data_field_names:
if field.name not in validated_data_field_names and (
self.partial or field.name not in updatable_field_names
):
validated_data[field.name] = getattr(instance, field.name)

# add vertrouwelijkheidaanduiding
validated_data["vertrouwelijkheidaanduiding"] = validated_data.get(
"vertrouwelijkheidaanduiding", instance.vertrouwelijkheidaanduiding
)
validated_data["pk"] = None
validated_data["versie"] += 1

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,47 @@ def test_eio_update(self):
self.assertEqual(first_version.versie, 1)
self.assertEqual(first_version.beschrijving, "beschrijving1")

def test_eio_update_with_empty_content(self):
eio = EnkelvoudigInformatieObjectFactory.create(
beschrijving="beschrijving1", informatieobjecttype__concept=False
)

eio_url = reverse(
"enkelvoudiginformatieobject-detail", kwargs={"uuid": eio.uuid}
)

eio_response = self.client.get(eio_url)
eio_data = eio_response.data

lock = self.client.post(f"{eio_url}/lock").data["lock"]
eio_data["lock"] = lock
for i in ["integriteit", "ondertekening", "inhoud", "bestandsomvang"]:
eio_data.pop(i)

response = self.client.put(eio_url, eio_data)

self.assertEqual(response.status_code, status.HTTP_200_OK)
response_data = response.json()

self.assertIsNone(response_data["inhoud"])
self.assertIsNone(response_data["bestandsomvang"])

eios = EnkelvoudigInformatieObject.objects.filter(uuid=eio.uuid).order_by(
"-versie"
)

self.assertEqual(len(eios), 2)

latest_version = eios.first()
self.assertEqual(latest_version.versie, 2)
self.assertEqual(str(latest_version.inhoud), "")
self.assertIsNone(latest_version.bestandsomvang)

first_version = eios[1]
self.assertEqual(first_version.versie, 1)
self.assertNotEqual(str(first_version.inhoud), "")
self.assertIsNotNone(first_version.bestandsomvang)

def test_eio_partial_update(self):
eio = EnkelvoudigInformatieObjectFactory.create(beschrijving="beschrijving1")

Expand Down

0 comments on commit 372d5ac

Please sign in to comment.