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);
+  }
 }

Reply via email to