You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2019/11/27 07:51:01 UTC

[olingo-odata4] 01/02: [OLINGO-1114] Fix NULL PrimitiveValue change the type when convert (#21)

This is an automated email from the ASF dual-hosted git repository.

mibo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git

commit 5cf7e1c0c67b01d03e53f8e46f77b8a4c26ada8d
Author: jzhao <jz...@talend.com>
AuthorDate: Wed Nov 27 15:38:27 2019 +0800

    [OLINGO-1114] Fix NULL PrimitiveValue change the type when convert (#21)
    
    ClientEntity to a HttpEntity
---
 .../org/apache/olingo/client/core/JSONTest.java    | 70 ++++++++++++++++++++++
 .../org/apache/olingo/client/core/olingo1114.json  | 17 ++++++
 2 files changed, 87 insertions(+)

diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/JSONTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/JSONTest.java
index 29a5222..d6af25a 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/JSONTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/JSONTest.java
@@ -32,6 +32,8 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.util.EntityUtils;
 import org.apache.olingo.client.api.data.ResWrap;
 import org.apache.olingo.client.api.domain.ClientAnnotation;
 import org.apache.olingo.client.api.domain.ClientCollectionValue;
@@ -45,6 +47,7 @@ import org.apache.olingo.client.api.domain.ClientProperty;
 import org.apache.olingo.client.api.domain.ClientValue;
 import org.apache.olingo.client.core.domain.ClientAnnotationImpl;
 import org.apache.olingo.client.core.serialization.JsonDeserializer;
+import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.client.core.serialization.JsonSerializer;
 import org.apache.olingo.commons.api.Constants;
 import org.apache.olingo.commons.api.data.ComplexValue;
@@ -907,6 +910,73 @@ public class JSONTest extends AbstractTest {
       i++;
     }
   }
+
+  @Test
+  public void testOLINGO1114() throws Exception {
+    ClientEntity entityIncNullValue = client.getObjectFactory()
+            .newEntity(new FullQualifiedName("Microsoft.Dynamics.CRM", "account"));
+    List<ClientProperty> properties = entityIncNullValue.getProperties();
+
+    // Property "name"
+    ClientPrimitiveValue.Builder valueBuilder = client.getObjectFactory().newPrimitiveValueBuilder();
+    valueBuilder.setType(EdmPrimitiveTypeKind.String);
+    valueBuilder.setValue("testString");
+    ClientProperty name = client.getObjectFactory().newPrimitiveProperty("name", valueBuilder.build());
+    properties.add(name);
+
+    // Property "testDecimal"
+    valueBuilder = client.getObjectFactory().newPrimitiveValueBuilder();
+    valueBuilder.setType(EdmPrimitiveTypeKind.Decimal);
+    valueBuilder.setValue(null);
+    ClientProperty revenue = client.getObjectFactory().newPrimitiveProperty("testDecimal", valueBuilder.build());
+    properties.add(revenue);
+
+    // Property "testByte"
+    valueBuilder = client.getObjectFactory().newPrimitiveValueBuilder();
+    valueBuilder.setType(EdmPrimitiveTypeKind.Byte);
+    valueBuilder.setValue(null);
+    ClientProperty testByte = client.getObjectFactory().newPrimitiveProperty("testByte", valueBuilder.build());
+    properties.add(testByte);
+
+    // Property "testDouble"
+    valueBuilder = client.getObjectFactory().newPrimitiveValueBuilder();
+    valueBuilder.setType(EdmPrimitiveTypeKind.Double);
+    valueBuilder.setValue(null);
+    ClientProperty testDouble = client.getObjectFactory().newPrimitiveProperty("testDouble", valueBuilder.build());
+    properties.add(testDouble);
+
+    // Property "testInt64"
+    valueBuilder = client.getObjectFactory().newPrimitiveValueBuilder();
+    valueBuilder.setType(EdmPrimitiveTypeKind.Int64);
+    valueBuilder.setValue(null);
+    ClientProperty testInt64 = client.getObjectFactory().newPrimitiveProperty("testInt64", valueBuilder.build());
+    properties.add(testInt64);
+
+    // Property "testInt32"
+    valueBuilder = client.getObjectFactory().newPrimitiveValueBuilder();
+    valueBuilder.setType(EdmPrimitiveTypeKind.Int32);
+    valueBuilder.setValue(null);
+    ClientProperty testInt32 = client.getObjectFactory().newPrimitiveProperty("testInt32", valueBuilder.build());
+    properties.add(testInt32);
+
+    // Property "testInt16"
+    valueBuilder = client.getObjectFactory().newPrimitiveValueBuilder();
+    valueBuilder.setType(EdmPrimitiveTypeKind.Int16);
+    valueBuilder.setValue(null);
+    ClientProperty testInt16 = client.getObjectFactory().newPrimitiveProperty("testInt16", valueBuilder.build());
+    properties.add(testInt16);
+
+    InputStream inputStream = client.getWriter().writeEntity(entityIncNullValue, ContentType.JSON);
+    HttpEntity httpEntity = URIUtils.buildInputStreamEntity(client, inputStream);
+
+    final String actual = EntityUtils.toString(httpEntity);
+    final JsonNode expected =
+            OBJECT_MAPPER.readTree(IOUtils.toString(getClass().getResourceAsStream("olingo1114.json")).
+                    replace(Constants.JSON_NAVIGATION_LINK, Constants.JSON_BIND_LINK_SUFFIX));
+    final ObjectNode actualNode = (ObjectNode) OBJECT_MAPPER.readTree(new ByteArrayInputStream(actual.getBytes()));
+    assertEquals(expected, actualNode);
+  }
+
   
   @Test
   public void issueOLINGO1152() throws Exception {
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/olingo1114.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/olingo1114.json
new file mode 100644
index 0000000..fbf5e0d
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/olingo1114.json
@@ -0,0 +1,17 @@
+{
+  "@odata.type":"#Microsoft.Dynamics.CRM.account",
+  "name@odata.type":"String",
+  "name":"testString",
+  "testDecimal@odata.type":"Decimal",
+  "testDecimal":null,
+  "testByte@odata.type":"Byte",
+  "testByte":null,
+  "testDouble@odata.type":"Double",
+  "testDouble":null,
+  "testInt64@odata.type":"Int64",
+  "testInt64":null,
+  "testInt32@odata.type":"Int32",
+  "testInt32":null,
+  "testInt16@odata.type":"Int16",
+  "testInt16":null
+}
\ No newline at end of file