From d7246d255fd4d7bfe02d4c45afa59bf2f121a640 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 12 Sep 2023 13:39:25 +0200 Subject: [PATCH] fixed nested properties deserialization in BaseDocument --- .../arangodb/entity/AbstractBaseDocument.java | 1 + .../java/com/arangodb/serde/SerdeTest.java | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java b/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java index cce54a832..2bd5d4982 100644 --- a/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java +++ b/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java @@ -91,6 +91,7 @@ public Map getProperties() { return Collections.unmodifiableMap(properties); } + @JsonIgnore public void setProperties(final Map props) { for (String f : getMetaProps()) { requireString(f, props.get(f)); diff --git a/driver/src/test/java/com/arangodb/serde/SerdeTest.java b/driver/src/test/java/com/arangodb/serde/SerdeTest.java index ebdc5c276..7bc9009df 100644 --- a/driver/src/test/java/com/arangodb/serde/SerdeTest.java +++ b/driver/src/test/java/com/arangodb/serde/SerdeTest.java @@ -1,6 +1,7 @@ package com.arangodb.serde; import com.arangodb.ContentType; +import com.arangodb.entity.BaseDocument; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.serde.InternalSerdeProvider; import com.arangodb.internal.serde.SerdeUtils; @@ -8,9 +9,13 @@ import com.arangodb.util.RawJson; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; +import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; +import java.util.Collections; +import java.util.Map; + import static org.assertj.core.api.Assertions.assertThat; @@ -38,4 +43,30 @@ void rawBytesSerde(ContentType type) { assertThat(deserialized).isEqualTo(raw); } + @ParameterizedTest + @EnumSource(ContentType.class) + void deserializeBaseDocumentWithNestedProperties(ContentType type) { + InternalSerde s = new InternalSerdeProvider(type).create(); + RawJson json = RawJson.of("{\"foo\":\"aaa\",\"properties\":{\"foo\":\"bbb\"}}"); + BaseDocument deserialized = s.deserialize(s.serialize(json), BaseDocument.class); + assertThat(deserialized.getAttribute("foo")).isEqualTo("aaa"); + assertThat(deserialized.getAttribute("properties")) + .isInstanceOf(Map.class) + .asInstanceOf(InstanceOfAssertFactories.MAP) + .containsEntry("foo", "bbb"); + } + + @ParameterizedTest + @EnumSource(ContentType.class) + void serializeBaseDocumentWithNestedProperties(ContentType type) { + InternalSerde s = new InternalSerdeProvider(type).create(); + BaseDocument doc = new BaseDocument(); + doc.addAttribute("foo", "aaa"); + doc.addAttribute("properties", Collections.singletonMap("foo", "bbb")); + byte[] ser = s.serialize(doc); + ObjectNode on = s.deserializeUserData(ser, ObjectNode.class); + assertThat(on.get("foo").textValue()).isEqualTo("aaa"); + assertThat(on.get("properties").get("foo").textValue()).isEqualTo("bbb"); + } + }