Repository: olingo-odata4 Updated Branches: refs/heads/master 855a586b3 -> 338ed7078
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/338ed707/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java index d58aae2..bee2500 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java @@ -89,6 +89,8 @@ public abstract class AbstractTestITCase { protected static String testKeyAsSegmentServiceRootURL; + protected static String testActionOverloadingServiceRootURL; + protected static String testOpenTypeServiceRootURL; protected static String testLargeModelServiceRootURL; @@ -99,6 +101,7 @@ public abstract class AbstractTestITCase { public static void setUpODataServiceRoot() throws IOException { testStaticServiceRootURL = "http://localhost:9080/StaticService/V30/Static.svc"; testKeyAsSegmentServiceRootURL = "http://localhost:9080/StaticService/V30/KeyAsSegment.svc"; + testActionOverloadingServiceRootURL = "http://localhost:9080/StaticService/V30/ActionOverloading.svc"; testOpenTypeServiceRootURL = "http://localhost:9080/StaticService/V30/Static.svc/openType"; testLargeModelServiceRootURL = "http://localhost:9080/StaticService/V30/Static.svc/large"; testAuthServiceRootURL = "http://localhost:9080/DefaultService.svc"; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/338ed707/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java index 9250ed3..19cf96f 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java @@ -18,116 +18,166 @@ */ package org.apache.olingo.client.core.it.v3; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.LinkedHashMap; +import java.util.Map; +import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent; +import org.apache.olingo.client.api.communication.response.ODataInvokeResponse; +import org.apache.olingo.client.api.uri.v3.URIBuilder; +import org.apache.olingo.client.core.uri.URIUtils; +import org.apache.olingo.commons.api.domain.ODataValue; +import org.apache.olingo.commons.api.domain.v3.ODataEntity; +import org.apache.olingo.commons.api.domain.v3.ODataEntitySet; +import org.apache.olingo.commons.api.domain.v3.ODataProperty; +import org.apache.olingo.commons.api.edm.Edm; +import org.apache.olingo.commons.api.edm.EdmAction; +import org.apache.olingo.commons.api.edm.EdmActionImport; +import org.apache.olingo.commons.api.edm.EdmEntityContainer; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; +import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; +import org.apache.olingo.commons.api.edm.FullQualifiedName; +import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32; +import org.junit.Test; + public class ActionOverloadingTestITCase extends AbstractTestITCase { -// @Test -// public void retrieveProducts() { -// final EdmV3Metadata metadata = client.getRetrieveRequestFactory(). -// getMetadataRequest(testActionOverloadingServiceRootURL).execute().getBody(); -// assertNotNull(metadata); -// -// final EntityContainer container = metadata.getSchema(0).getEntityContainers().get(0); -// assertNotNull(container); -// -// int execs = 0; -// for (FunctionImport funcImp : container.getFunctionImports("RetrieveProduct")) { -// final ODataInvokeResponse<ODataProperty> res; -// if (funcImp.getParameters().isEmpty()) { -// final URIBuilder funcImpBuilder = client.getURIBuilder(testActionOverloadingServiceRootURL). -// appendFunctionImportSegment(URIUtils.rootFunctionImportURISegment(container, funcImp)); -// -// res = client.getInvokeRequestFactory().<ODataProperty>getInvokeRequest( -// funcImpBuilder.build(), metadata, funcImp).execute(); -// } else if ("Microsoft.Test.OData.Services.AstoriaDefaultService.Product". -// equals(funcImp.getParameters().get(0).getType())) { -// -// final ODataEntity product = client.getRetrieveRequestFactory().getEntityRequest( -// client.getURIBuilder(testActionOverloadingServiceRootURL). -// appendEntityTypeSegment("Product").appendKeySegment(-10).build()). -// execute().getBody(); -// assertNotNull(product); -// -// res = client.getInvokeRequestFactory().<ODataProperty>getInvokeRequest( -// product.getOperation("RetrieveProduct").getTarget(), metadata, funcImp).execute(); -// } else if ("Microsoft.Test.OData.Services.AstoriaDefaultService.OrderLine". -// equals(funcImp.getParameters().get(0).getType())) { -// -// final Map<String, Object> key = new LinkedHashMap<String, Object>(2); -// key.put("OrderId", -10); -// key.put("ProductId", -10); -// final ODataEntity orderLine = client.getRetrieveRequestFactory().getEntityRequest( -// client.getURIBuilder(testActionOverloadingServiceRootURL). -// appendEntityTypeSegment("OrderLine").appendKeySegment(key).build()). -// execute().getBody(); -// assertNotNull(orderLine); -// -// res = client.getInvokeRequestFactory().<ODataProperty>getInvokeRequest( -// orderLine.getOperation("RetrieveProduct").getTarget(), metadata, funcImp).execute(); -// } else { -// res = null; -// } -// -// assertNotNull(res); -// assertEquals(200, res.getStatusCode()); -// assertEquals(Integer.valueOf(-10), res.getBody().getPrimitiveValue().<Integer>toCastValue()); -// execs++; -// } -// assertEquals(3, execs); -// } -// -// @Test -// public void increaseSalaries() { -// final EdmV3Metadata metadata = -// client.getRetrieveRequestFactory().getMetadataRequest(testActionOverloadingServiceRootURL).execute(). -// getBody(); -// assertNotNull(metadata); -// -// final EntityContainer container = metadata.getSchema(0).getEntityContainers().get(0); -// assertNotNull(container); -// -// int execs = 0; -// for (FunctionImport funcImp : container.getFunctionImports("IncreaseSalaries")) { -// final Map<String, ODataValue> parameters = new LinkedHashMap<String, ODataValue>(1); -// parameters.put("n", -// client.getPrimitiveValueBuilder().setType(EdmSimpleType.Int32).setValue(5).build()); -// -// final ODataInvokeResponse<ODataNoContent> res; -// if ("Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Employee)". -// equals(funcImp.getParameters().get(0).getType())) { -// -// final URIBuilder builder = client.getURIBuilder(testActionOverloadingServiceRootURL). -// appendEntitySetSegment("Person"). -// appendStructuralSegment("Microsoft.Test.OData.Services.AstoriaDefaultService.Employee"); -// -// final ODataEntitySet employees = client.getRetrieveRequestFactory().getEntitySetRequest( -// builder.build()).execute().getBody(); -// assertNotNull(employees); -// -// res = client.getInvokeRequestFactory().<ODataNoContent>getInvokeRequest( -// builder.appendFunctionImportSegment(funcImp.getName()).build(), metadata, funcImp, parameters). -// execute(); -// } else if ("Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee)". -// equals(funcImp.getParameters().get(0).getType())) { -// -// final URIBuilder builder = client.getURIBuilder(testActionOverloadingServiceRootURL). -// appendEntitySetSegment("Person"). -// appendStructuralSegment("Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee"); -// -// final ODataEntitySet specialEmployees = client.getRetrieveRequestFactory().getEntitySetRequest( -// builder.build()).execute().getBody(); -// assertNotNull(specialEmployees); -// -// res = client.getInvokeRequestFactory().<ODataNoContent>getInvokeRequest( -// builder.appendFunctionImportSegment(funcImp.getName()).build(), metadata, funcImp, parameters). -// execute(); -// } else { -// res = null; -// } -// -// assertNotNull(res); -// assertEquals(204, res.getStatusCode()); -// execs++; -// } -// assertEquals(2, execs); -// } + @Test + public void retrieveProduct() throws EdmPrimitiveTypeException { + final Edm edm = getClient().getRetrieveRequestFactory(). + getMetadataRequest(testActionOverloadingServiceRootURL).execute().getBody(); + assertNotNull(edm); + + final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer(); + assertNotNull(container); + + int execs = 0; + for (EdmActionImport actImp : container.getActionImports()) { + if ("RetrieveProduct".equals(actImp.getName())) { + // 1. unbound + final EdmAction unbound = actImp.getUnboundAction(); + assertNotNull(unbound); + assertEquals(EdmInt32.getInstance(), unbound.getReturnType().getType()); + + final URIBuilder unboundBuilder = getClient().getURIBuilder(testActionOverloadingServiceRootURL). + appendOperationCallSegment(URIUtils.operationImportURISegment(container, actImp)); + final ODataInvokeResponse<ODataProperty> unboundRes = getClient().getInvokeRequestFactory(). + <ODataProperty>getInvokeRequest(unboundBuilder.build(), unbound).execute(); + assertNotNull(unboundRes); + assertEquals(200, unboundRes.getStatusCode()); + assertEquals(Integer.valueOf(-10), unboundRes.getBody().getPrimitiveValue().toCastValue(Integer.class)); + execs++; + + // 2. bound to Product + final EdmAction productBound = edm.getBoundAction( + new FullQualifiedName(container.getNamespace(), actImp.getName()), + new FullQualifiedName(container.getNamespace(), "Product"), false); + assertNotNull(productBound); + assertEquals(EdmInt32.getInstance(), productBound.getReturnType().getType()); + + final ODataEntity product = getClient().getRetrieveRequestFactory().getEntityRequest( + getClient().getURIBuilder(testActionOverloadingServiceRootURL). + appendEntitySetSegment("Product").appendKeySegment(-10).build()). + execute().getBody(); + assertNotNull(product); + + final ODataInvokeResponse<ODataProperty> productBoundRes = getClient().getInvokeRequestFactory(). + <ODataProperty>getInvokeRequest(product.getOperation(actImp.getName()).getTarget(), unbound). + execute(); + assertNotNull(productBoundRes); + assertEquals(200, productBoundRes.getStatusCode()); + assertEquals(Integer.valueOf(-10), productBoundRes.getBody().getPrimitiveValue().toCastValue(Integer.class)); + execs++; + + // 3. bound to OrderLine + final EdmAction orderLineBound = edm.getBoundAction( + new FullQualifiedName(container.getNamespace(), actImp.getName()), + new FullQualifiedName(container.getNamespace(), "OrderLine"), false); + assertNotNull(orderLineBound); + assertEquals(EdmInt32.getInstance(), orderLineBound.getReturnType().getType()); + + final Map<String, Object> key = new LinkedHashMap<String, Object>(2); + key.put("OrderId", -10); + key.put("ProductId", -10); + final ODataEntity orderLine = getClient().getRetrieveRequestFactory().getEntityRequest( + getClient().getURIBuilder(testActionOverloadingServiceRootURL). + appendEntitySetSegment("OrderLine").appendKeySegment(key).build()). + execute().getBody(); + assertNotNull(orderLine); + + final ODataInvokeResponse<ODataProperty> orderLineBoundRes = getClient().getInvokeRequestFactory(). + <ODataProperty>getInvokeRequest(orderLine.getOperation(actImp.getName()).getTarget(), unbound). + execute(); + assertNotNull(orderLineBoundRes); + assertEquals(200, orderLineBoundRes.getStatusCode()); + assertEquals(Integer.valueOf(-10), orderLineBoundRes.getBody().getPrimitiveValue().toCastValue(Integer.class)); + execs++; + } + } + assertEquals(3, execs); + } + + @Test + public void increaseSalaries() { + final Edm edm = getClient().getRetrieveRequestFactory(). + getMetadataRequest(testActionOverloadingServiceRootURL).execute().getBody(); + assertNotNull(edm); + + final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer(); + assertNotNull(container); + + int execs = 0; + for (EdmActionImport actImp : container.getActionImports()) { + if ("IncreaseSalaries".equals(actImp.getName())) { + final Map<String, ODataValue> parameters = new LinkedHashMap<String, ODataValue>(1); + parameters.put("n", getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Int32).setValue(5).build()); + + // 1. bound to employees + final EdmAction employeeBound = edm.getBoundAction( + new FullQualifiedName(container.getNamespace(), actImp.getName()), + new FullQualifiedName(container.getNamespace(), "Employee"), true); + assertNotNull(employeeBound); + assertNull(employeeBound.getReturnType()); + + final URIBuilder employeeBuilder = getClient().getURIBuilder(testActionOverloadingServiceRootURL). + appendEntitySetSegment("Person"). + appendDerivedEntityTypeSegment("Microsoft.Test.OData.Services.AstoriaDefaultService.Employee"); + final ODataEntitySet employees = getClient().getRetrieveRequestFactory().getEntitySetRequest( + employeeBuilder.build()).execute().getBody(); + assertNotNull(employees); + + final ODataInvokeResponse<ODataNoContent> employeeRes = getClient().getInvokeRequestFactory(). + <ODataNoContent>getInvokeRequest(employeeBuilder.appendOperationCallSegment(actImp.getName()).build(), + employeeBound, parameters).execute(); + assertNotNull(employeeRes); + assertEquals(204, employeeRes.getStatusCode()); + execs++; + + // 1. bound to special employees + final EdmAction specEmpBound = edm.getBoundAction( + new FullQualifiedName(container.getNamespace(), actImp.getName()), + new FullQualifiedName(container.getNamespace(), "SpecialEmployee"), true); + assertNotNull(specEmpBound); + assertNull(specEmpBound.getReturnType()); + + final URIBuilder specEmpBuilder = getClient().getURIBuilder(testActionOverloadingServiceRootURL). + appendEntitySetSegment("Person"). + appendDerivedEntityTypeSegment("Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee"); + final ODataEntitySet specEmps = getClient().getRetrieveRequestFactory().getEntitySetRequest( + specEmpBuilder.build()).execute().getBody(); + assertNotNull(specEmps); + + final ODataInvokeResponse<ODataNoContent> specEmpsRes = getClient().getInvokeRequestFactory(). + <ODataNoContent>getInvokeRequest(specEmpBuilder.appendOperationCallSegment(actImp.getName()).build(), + specEmpBound, parameters).execute(); + assertNotNull(specEmpsRes); + assertEquals(204, specEmpsRes.getStatusCode()); + execs++; + } + } + assertEquals(2, execs); + } }
