[OLINGO-1004] refactored conformance tests
Signed-off-by: Christian Amend <christian.amend@sap.com>
This commit is contained in:
parent
038a4821a8
commit
7ad6155bf5
|
@ -23,34 +23,22 @@ import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.net.URI;
|
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.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.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.ODataDeltaRequest;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
|
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.request.retrieve.ODataEntitySetRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.AsyncResponseWrapper;
|
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.ODataDeleteResponse;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
|
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.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.ClientDelta;
|
||||||
import org.apache.olingo.client.api.domain.ClientEntity;
|
import org.apache.olingo.client.api.domain.ClientEntity;
|
||||||
import org.apache.olingo.client.api.domain.ClientEntitySet;
|
import org.apache.olingo.client.api.domain.ClientEntitySet;
|
||||||
import org.apache.olingo.client.api.domain.ClientProperty;
|
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.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.EdmPrimitiveTypeKind;
|
||||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||||
import org.apache.olingo.commons.api.http.HttpHeader;
|
import org.apache.olingo.commons.api.http.HttpHeader;
|
||||||
|
@ -64,84 +52,6 @@ import org.junit.Test;
|
||||||
*/
|
*/
|
||||||
public class ConformanceTestITCase extends AbstractTestITCase {
|
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).
|
* 4. MUST follow redirects (section 9.1.5).
|
||||||
*/
|
*/
|
||||||
|
@ -164,40 +74,6 @@ public class ConformanceTestITCase extends AbstractTestITCase {
|
||||||
assertEquals("Edm.GeographyPoint", entity.getProperty("Home").getPrimitiveValue().getTypeName());
|
assertEquals("Edm.GeographyPoint", entity.getProperty("Home").getPrimitiveValue().getTypeName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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).
|
* 6. MUST support instances returning properties and navigation properties not specified in metadata (section 11.2).
|
||||||
*/
|
*/
|
||||||
|
@ -241,84 +117,6 @@ public class ConformanceTestITCase extends AbstractTestITCase {
|
||||||
assertEquals(204, deleteRes.getStatusCode());
|
assertEquals(204, deleteRes.getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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).
|
* 10. MAY support deleted entities, link entities, deleted link entities in a delta response (section 11.3).
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue