Repository: olingo-odata4
Updated Branches:
  refs/heads/master 038a4821a -> f2fd03553


[OLINGO-1004] refactored conformance tests

Signed-off-by: Christian Amend <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/7ad6155b
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/7ad6155b
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/7ad6155b

Branch: refs/heads/master
Commit: 7ad6155bf58c2b994d6fc25c2704bb4804e54394
Parents: 038a482
Author: Morten Riedel <[email protected]>
Authored: Wed Sep 7 10:44:12 2016 +0200
Committer: Christian Amend <[email protected]>
Committed: Thu Sep 8 14:00:42 2016 +0200

----------------------------------------------------------------------
 .../olingo/fit/base/ConformanceTestITCase.java  | 202 ---------------
 .../fit/tecsvc/client/ConformanceITCase.java    | 254 +++++++++++++++++++
 2 files changed, 254 insertions(+), 202 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ad6155b/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java 
b/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java
index d682e64..7e08428 100644
--- a/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java
@@ -23,34 +23,22 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-import java.math.BigDecimal;
 import java.net.URI;
-import java.util.Calendar;
-import java.util.TimeZone;
 
 import org.apache.olingo.client.api.communication.request.AsyncRequestWrapper;
-import 
org.apache.olingo.client.api.communication.request.cud.ODataDeleteRequest;
 import 
org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest;
-import 
org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
-import org.apache.olingo.client.api.communication.request.cud.UpdateType;
 import 
org.apache.olingo.client.api.communication.request.retrieve.ODataDeltaRequest;
 import 
org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
 import 
org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
 import 
org.apache.olingo.client.api.communication.response.AsyncResponseWrapper;
 import org.apache.olingo.client.api.communication.response.ODataDeleteResponse;
 import 
org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
-import 
org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
 import 
org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-import org.apache.olingo.client.api.domain.ClientCollectionValue;
 import org.apache.olingo.client.api.domain.ClientDelta;
 import org.apache.olingo.client.api.domain.ClientEntity;
 import org.apache.olingo.client.api.domain.ClientEntitySet;
 import org.apache.olingo.client.api.domain.ClientProperty;
-import org.apache.olingo.client.api.domain.ClientValue;
 import org.apache.olingo.client.api.uri.URIBuilder;
-import org.apache.olingo.client.core.http.BasicAuthHttpClientFactory;
-import org.apache.olingo.client.core.http.DefaultHttpClientFactory;
-import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.http.HttpHeader;
@@ -65,84 +53,6 @@ import org.junit.Test;
 public class ConformanceTestITCase extends AbstractTestITCase {
 
   /**
-   * 1. MUST specify the OData-MaxVersion header in requests (section 8.2.6).
-   */
-  @Test
-  public void item1() {
-    final URIBuilder uriBuilder = 
client.newURIBuilder(testStaticServiceRootURL).
-        
appendEntitySetSegment("Customers").appendKeySegment(1).expand("Company");
-
-    final ODataEntityRequest<ClientEntity> req =
-        
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
-
-    assertEquals("4.0", req.getHeader(HttpHeader.ODATA_MAX_VERSION));
-
-    assertNotNull(req.execute().getBody());
-  }
-
-  /**
-   * 2. MUST specify OData-Version (section 8.1.5) and Content-Type (section 
8.1.1) in any request with a payload.
-   */
-  @Test
-  public void item2() {
-    final ClientEntity order = getClient().getObjectFactory().newEntity(
-        new 
FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Order"));
-
-    final ClientProperty orderId = 
getClient().getObjectFactory().newPrimitiveProperty("OrderID",
-        
getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(2000));
-    order.getProperties().add(orderId);
-
-    Calendar dateTime = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
-    dateTime.set(2011, 2, 4, 16, 3, 57);
-    final ClientProperty orderDate = 
getClient().getObjectFactory().newPrimitiveProperty("OrderDate",
-        getClient().getObjectFactory().newPrimitiveValueBuilder().
-        
setType(EdmPrimitiveTypeKind.DateTimeOffset).setValue(dateTime).build());
-    order.getProperties().add(orderDate);
-
-    final ClientProperty shelfLife = 
getClient().getObjectFactory().newPrimitiveProperty("ShelfLife",
-        getClient().getObjectFactory().newPrimitiveValueBuilder().
-        setType(EdmPrimitiveTypeKind.Duration).setValue(new 
BigDecimal("0.0000001")).build());
-    order.getProperties().add(shelfLife);
-
-    final ClientCollectionValue<ClientValue> orderShelfLifesValue = 
getClient().getObjectFactory().
-        newCollectionValue("Collection(Duration)");
-    
orderShelfLifesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-        setType(EdmPrimitiveTypeKind.Duration).setValue(new 
BigDecimal("0.0000001")).build());
-    
orderShelfLifesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-        setType(EdmPrimitiveTypeKind.Duration).setValue(new 
BigDecimal("0.0000002")).build());
-    final ClientProperty orderShelfLifes = getClient().getObjectFactory().
-        newCollectionProperty("OrderShelfLifes", orderShelfLifesValue);
-    order.getProperties().add(orderShelfLifes);
-
-    final ODataEntityCreateRequest<ClientEntity> req = 
getClient().getCUDRequestFactory().getEntityCreateRequest(
-        getClient().newURIBuilder(testStaticServiceRootURL).
-        appendEntitySetSegment("Orders").build(), order);
-    req.setFormat(ContentType.JSON_FULL_METADATA);
-
-    // check for OData-Version
-    assertEquals("4.0", req.getHeader(HttpHeader.ODATA_VERSION));
-
-    // check for Content-Type
-    assertEquals(
-        ContentType.JSON_FULL_METADATA.toContentTypeString(),
-        req.getHeader("Content-Type"));
-    assertEquals(
-        ContentType.JSON_FULL_METADATA.toContentTypeString(),
-        req.getContentType());
-
-    final ClientEntity created = req.execute().getBody();
-    assertNotNull(created);
-
-    final URI deleteURI = created.getEditLink() == null
-        ? getClient().newURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Orders").appendKeySegment(2000).build()
-            : created.getEditLink();
-            final ODataDeleteRequest deleteReq = 
getClient().getCUDRequestFactory().getDeleteRequest(deleteURI);
-            final ODataDeleteResponse deleteRes = deleteReq.execute();
-            assertEquals(204, deleteRes.getStatusCode());
-  }
-
-  /**
    * 4. MUST follow redirects (section 9.1.5).
    */
   @Test
@@ -165,40 +75,6 @@ public class ConformanceTestITCase extends 
AbstractTestITCase {
   }
 
   /**
-   * 5. MUST correctly handle next links (section 11.2.5.7).
-   */
-  @Test
-  public void item5() {
-    final URIBuilder uriBuilder = 
client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
-
-    ODataEntitySetRequest<ClientEntitySet> req = 
client.getRetrieveRequestFactory().
-        getEntitySetRequest(uriBuilder.build());
-    req.setFormat(ContentType.JSON_FULL_METADATA);
-    req.setPrefer(client.newPreferences().maxPageSize(5));
-
-    ODataRetrieveResponse<ClientEntitySet> res = req.execute();
-    ClientEntitySet feed = res.getBody();
-
-    assertNotNull(feed);
-
-    assertEquals(5, feed.getEntities().size());
-    assertNotNull(feed.getNext());
-
-    final URI expected = URI.create(testStaticServiceRootURL + 
"/People?$skiptoken=5");
-    final URI found = URIUtils.getURI(testStaticServiceRootURL, 
feed.getNext().toASCIIString());
-
-    assertEquals(expected, found);
-
-    req = client.getRetrieveRequestFactory().getEntitySetRequest(found);
-    req.setFormat(ContentType.JSON_FULL_METADATA);
-
-    res = req.execute();
-    feed = res.getBody();
-
-    assertNotNull(feed);
-  }
-
-  /**
    * 6. MUST support instances returning properties and navigation properties 
not specified in metadata (section 11.2).
    */
   @Test
@@ -242,84 +118,6 @@ public class ConformanceTestITCase extends 
AbstractTestITCase {
   }
 
   /**
-   * 7. MUST generate PATCH requests for updates, if the client supports 
updates (section 11.4.3).
-   */
-  @Test
-  public void item7() {
-    final URI uri = client.newURIBuilder(testStaticServiceRootURL).
-        appendEntitySetSegment("Customers").appendKeySegment(1).build();
-
-    final ClientEntity patch = client.getObjectFactory().newEntity(
-        new 
FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Customer"));
-    patch.setEditLink(uri);
-
-    final String newname = "New Name (" + System.currentTimeMillis() + ")";
-    
patch.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("FirstName",
-        
getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(newname)));
-
-    final ODataEntityUpdateRequest<ClientEntity> req =
-        
getClient().getCUDRequestFactory().getEntityUpdateRequest(UpdateType.PATCH, 
patch);
-
-    final ODataEntityUpdateResponse<ClientEntity> res = req.execute();
-    assertEquals(204, res.getStatusCode());
-
-    final ClientEntity actual = read(ContentType.JSON, uri);
-
-    assertEquals(newname, 
actual.getProperty("FirstName").getPrimitiveValue().toString());
-  }
-
-  /**
-   * 8. SHOULD support basic authentication as specified in [RFC2617] over 
HTTPS.
-   * <br />
-   * Unfortunately no service over HTTPs is available yet.
-   */
-  @Test
-  public void item8() {
-    client.getConfiguration().setHttpClientFactory(new 
BasicAuthHttpClientFactory("odatajclient", "odatajclient"));
-
-    final URIBuilder uriBuilder = client.newURIBuilder(testAuthServiceRootURL).
-        
appendEntitySetSegment("Customers").appendKeySegment(1).expand("Company");
-
-    final ODataEntityRequest<ClientEntity> req =
-        
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
-    req.setFormat(ContentType.JSON_FULL_METADATA);
-
-    assertNotNull(req.execute().getBody());
-
-    client.getConfiguration().setHttpClientFactory(new 
DefaultHttpClientFactory());
-  }
-
-  /**
-   * 9. MAY request entity references in place of entities previously returned 
in the response (section 11.2.7).
-   */
-  @Test
-  public void item9() {
-    final URIBuilder uriBuilder = 
client.newURIBuilder(testStaticServiceRootURL).
-        
appendEntitySetSegment("Orders").appendKeySegment(8).appendNavigationSegment("CustomerForOrder").
-        appendRefSegment();
-
-    ODataEntityRequest<ClientEntity> req = 
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
-    req.setFormat(ContentType.JSON_FULL_METADATA);
-
-    ODataRetrieveResponse<ClientEntity> res = req.execute();
-    assertNotNull(res);
-
-    final ClientEntity entity = res.getBody();
-    assertNotNull(entity);
-    
assertTrue(entity.getId().toASCIIString().endsWith("/StaticService/V40/Static.svc/Customers(PersonID=1)"));
-
-    final URI referenceURI = client.newURIBuilder(testStaticServiceRootURL).
-        appendEntityIdSegment(entity.getId().toASCIIString()).build();
-
-    req = client.getRetrieveRequestFactory().getEntityRequest(referenceURI);
-    req.setFormat(ContentType.JSON_FULL_METADATA);
-
-    res = req.execute();
-    assertNotNull(res);
-    assertNotNull(res.getBody());
-  }
-
-  /**
    * 10. MAY support deleted entities, link entities, deleted link entities in 
a delta response (section 11.3).
    */
   @Test

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ad6155b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ConformanceITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ConformanceITCase.java 
b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ConformanceITCase.java
new file mode 100644
index 0000000..7ac81a4
--- /dev/null
+++ 
b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ConformanceITCase.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright 2016 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.olingo.fit.tecsvc.client;
+
+import java.net.URI;
+import org.apache.olingo.client.api.ODataClient;
+import 
org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest;
+import 
org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
+import org.apache.olingo.client.api.communication.request.cud.UpdateType;
+import 
org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
+import 
org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
+import 
org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
+import 
org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
+import 
org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
+import org.apache.olingo.client.api.domain.ClientEntity;
+import org.apache.olingo.client.api.domain.ClientEntitySet;
+import org.apache.olingo.client.api.uri.URIBuilder;
+import org.apache.olingo.client.core.http.BasicAuthHttpClientFactory;
+import org.apache.olingo.client.core.http.DefaultHttpClientFactory;
+import org.apache.olingo.client.core.uri.URIUtils;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.commons.api.http.HttpHeader;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
+import static 
org.apache.olingo.fit.tecsvc.client.AbstractTecSvcITCase.SERVICE_NAMESPACE;
+import static 
org.apache.olingo.fit.tecsvc.client.AbstractTecSvcITCase.SERVICE_URI;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
+
+/**
+ * The test cases in this class are inspired by client conformance criteria 
defined in the <a
+ * href="http://docs.oasis-open.org/odata/odata-json-format/v4.0/errata03/os
+ * /odata-json-format-v4.0-errata03-os-complete.html#_Toc453766671">specs
+ * 
+ * </a>.
+ */
+public class ConformanceITCase extends AbstractParamTecSvcITCase {
+
+  private static final String ODATA_MAX_VERSION_NUMBER = "4.0";
+  
+  private static final FullQualifiedName ET_TWO_PRIM = new 
FullQualifiedName(SERVICE_NAMESPACE, "ETTwoPrim");
+  private static final FullQualifiedName ET_ALL_PRIM = new 
FullQualifiedName(SERVICE_NAMESPACE, "ETAllPrim");
+
+  private static final String PROPERTY_INT64 = "PropertyInt64";
+
+  private static final String NAV_PROPERTY_ET_TWO_PRIM_ONE = 
"NavPropertyETTwoPrimOne";
+
+  private static final String ES_ALL_PRIM = "ESAllPrim";
+  private static final String ES_TWO_PRIM = "ESTwoPrim";
+
+  /**
+   * 1. MUST specify the OData-MaxVersion header in requests (section 8.2.6).
+   */
+  @Test
+  public void isOdataMaxVersion() {
+    final ODataClient client = getClient();
+    final URIBuilder uriBuilder = 
client.newURIBuilder(SERVICE_URI).appendEntitySetSegment("ESAllPrim")
+        .appendKeySegment(32767);
+
+    final ODataEntityRequest<ClientEntity> req =
+        
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+
+    assertEquals(ODATA_MAX_VERSION_NUMBER, 
req.getHeader(HttpHeader.ODATA_MAX_VERSION));
+
+    assertNotNull(req.execute().getBody());
+  }
+
+  /**
+   * 2. MUST specify OData-Version (section 8.1.5) and Content-Type (section 
8.1.1) in any request with a payload.
+   */
+  @Test
+  public void checkClientWithPayloadHeader() {
+    assumeTrue("json conformance test with content type", isJson());
+
+    ClientEntity newEntity = getFactory().newEntity(ET_ALL_PRIM);
+    
newEntity.getProperties().add(getFactory().newPrimitiveProperty(PROPERTY_INT64,
+        getFactory().newPrimitiveValueBuilder().buildInt64((long) 42)));
+    final ODataClient client = getClient();
+    
newEntity.addLink(getFactory().newEntityNavigationLink(NAV_PROPERTY_ET_TWO_PRIM_ONE,
+        client.newURIBuilder(SERVICE_URI)
+            .appendEntitySetSegment(ES_TWO_PRIM)
+            .appendKeySegment(32766)
+            .build()));
+
+    final ODataEntityCreateRequest<ClientEntity> createRequest = 
client.getCUDRequestFactory().getEntityCreateRequest(
+        
client.newURIBuilder(SERVICE_URI).appendEntitySetSegment(ES_ALL_PRIM).build(),
+        newEntity);
+    assertNotNull(createRequest);
+    createRequest.setFormat(contentType);
+    // check for OData-Version
+    assertEquals(ODATA_MAX_VERSION_NUMBER, 
createRequest.getHeader(HttpHeader.ODATA_VERSION));
+
+    // check for Content-Type
+    assertEquals(
+        ContentType.APPLICATION_JSON.toContentTypeString(),
+        createRequest.getHeader(HttpHeader.CONTENT_TYPE));
+    assertEquals(
+        ContentType.APPLICATION_JSON.toContentTypeString(),
+        createRequest.getContentType());
+
+    final ODataEntityCreateResponse<ClientEntity> createResponse = 
createRequest.execute();
+
+    assertEquals(HttpStatusCode.CREATED.getStatusCode(), 
createResponse.getStatusCode());
+  }
+
+  /**
+   * 5. MUST correctly handle next links (section 11.2.5.7).
+   */
+  @Test
+  public void handleNextLinks() {
+    final ODataClient client = getClient();
+    final URIBuilder uriBuilder = 
client.newURIBuilder(SERVICE_URI).appendEntitySetSegment("ESServerSidePaging");
+
+    ODataEntitySetRequest<ClientEntitySet> req = 
client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder
+        .build());
+    req.setPrefer(client.newPreferences().maxPageSize(5));
+
+    ODataRetrieveResponse<ClientEntitySet> res = req.execute();
+    ClientEntitySet feed = res.getBody();
+    assertNotNull(feed);
+    assertEquals(5, feed.getEntities().size());
+    assertNotNull(feed.getNext());
+
+    final URI expected = URI.create(SERVICE_URI + 
"ESServerSidePaging?%24skiptoken=1%2A5");
+    final URI found = URIUtils.getURI(SERVICE_URI, 
feed.getNext().toASCIIString());
+    assertEquals(expected, found);
+    
+    req = client.getRetrieveRequestFactory().getEntitySetRequest(found);
+    assertNotNull(req);
+    res = req.execute();
+    assertNotNull(res);
+    feed = res.getBody();
+    assertNotNull(feed);
+  }
+
+  /**
+   * 7. MUST generate PATCH requests for updates, if the client supports 
updates (section 11.4.3).
+   **/
+  @Test
+  public void patchEntityRequestForUpdates() {
+    final ODataClient client = getClient();
+    final ClientEntity patch = 
client.getObjectFactory().newEntity(ET_TWO_PRIM);     
+    final URI uri = client.newURIBuilder(SERVICE_URI)
+            .appendEntitySetSegment(ES_TWO_PRIM)
+            .appendKeySegment(32766)
+            .build();
+    patch.setEditLink(uri);
+    final String newString = "Seconds: (" + System.currentTimeMillis() + ")";
+    
patch.getProperties().add(client.getObjectFactory().newPrimitiveProperty("PropertyString",
+        
client.getObjectFactory().newPrimitiveValueBuilder().buildString(newString)));
+
+    final ODataEntityUpdateRequest<ClientEntity> req =            
+        client.getCUDRequestFactory().getEntityUpdateRequest(UpdateType.PATCH, 
patch);
+    assertNotNull(req);
+    assertEquals(ODATA_MAX_VERSION_NUMBER, 
req.getHeader(HttpHeader.ODATA_MAX_VERSION));
+    
+    final ODataEntityUpdateResponse<ClientEntity> res = req.execute();
+    assertNotNull(res);
+    assertEquals(200, res.getStatusCode());   
+            
+    final ClientEntity entity = res.getBody();
+    assertNotNull(entity);
+    assertEquals(newString, 
entity.getProperty("PropertyString").getPrimitiveValue().toString());
+  }
+
+  /**
+   * 8. SHOULD support basic authentication as specified in [RFC2617] over 
HTTPS.
+   * <br />
+   * Unfortunately no service over HTTPs is available yet.
+   * (test is copied from ConformanceTest of the static service)
+   * TODO: correct client FIT test for https authentication
+   */  
+  @Test
+  public void basicHttpsAuthentication() {
+    final ODataClient client = getClient();
+    client.getConfiguration()
+            .setHttpClientFactory(new 
BasicAuthHttpClientFactory("odatajclient", "odatajclient"));
+
+    final URIBuilder uriBuilder = client.newURIBuilder(SERVICE_URI)
+            .appendEntitySetSegment(ES_TWO_PRIM)
+            .appendKeySegment(32767)
+            .expand("NavPropertyETAllPrimOne");
+
+    final ODataEntityRequest<ClientEntity> req =
+        
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+ 
+    assertNotNull(req.execute().getBody());
+
+    client.getConfiguration().setHttpClientFactory(new 
DefaultHttpClientFactory());
+  }
+  
+   /**
+   * 9. MAY request entity references in place of entities previously returned 
in the response (section 11.2.7).
+   */
+  @Test
+  public void entityNavigationReference() {
+    final ODataClient client = getClient();
+    final URIBuilder uriBuilder = client.newURIBuilder(SERVICE_URI)
+            .appendEntitySetSegment(ES_TWO_PRIM)
+            .appendKeySegment(32767)
+            .appendNavigationSegment("NavPropertyETAllPrimOne")
+            .appendRefSegment();
+
+    ODataEntityRequest<ClientEntity> req = 
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+
+    ODataRetrieveResponse<ClientEntity> res = req.execute();
+    assertNotNull(res);
+
+    final ClientEntity entity = res.getBody();
+    assertNotNull(entity);
+    assertTrue(entity.getId().toASCIIString().endsWith("ESAllPrim(32767)"));
+  } 
+  
+    /**
+   * 12. MAY support odata.metadata=minimal in a JSON response (see 
[OData-JSON]).
+   */
+  @Test
+  public void supportMetadataMinimal() {
+    assumeTrue("format should be json", isJson());
+    ODataClient client = getClient();
+    final URIBuilder uriBuilder = client.newURIBuilder(SERVICE_URI)
+            .appendEntitySetSegment(ES_TWO_PRIM)
+            .appendKeySegment(32767)
+            .expand("NavPropertyETAllPrimOne");
+
+    final ODataEntityRequest<ClientEntity> req =
+        
client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    req.setFormat(ContentType.JSON);
+
+    assertEquals("application/json;odata.metadata=minimal", 
req.getHeader("Accept"));
+    assertEquals("application/json;odata.metadata=minimal", req.getAccept());
+
+    final ODataRetrieveResponse<ClientEntity> res = req.execute();
+    assertTrue(res.getContentType().startsWith("application/json; 
odata.metadata=minimal"));
+
+    assertNotNull(res.getBody());
+  }
+}
\ No newline at end of file

Reply via email to