blob: 641769c3e1709f61cb18b0bc3f73862405240060 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.server.core.edm.provider;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmAction;
import org.apache.olingo.commons.api.edm.EdmException;
import org.apache.olingo.commons.api.edm.EdmFunction;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.server.api.edm.provider.Action;
import org.apache.olingo.server.api.edm.provider.EdmProvider;
import org.apache.olingo.server.api.edm.provider.Function;
import org.apache.olingo.server.api.edm.provider.Parameter;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class EdmProviderImplOverloadingTest {
private Edm edm;
private final FullQualifiedName operationName1 = new FullQualifiedName("n", "o1");
private final FullQualifiedName operationType1 = new FullQualifiedName("n", "t1");
private final FullQualifiedName operationType2 = new FullQualifiedName("n", "t2");
private final FullQualifiedName wrongOperationName = new FullQualifiedName("wrong", "wrong");
private final FullQualifiedName badOperationName = new FullQualifiedName("bad", "bad");
@Before
public void setup() throws Exception {
EdmProvider provider = mock(EdmProvider.class);
List<Action> actions = new ArrayList<Action>();
Action action = new Action().setName(operationName1.getName());
actions.add(action);
List<Parameter> action1Parameters = new ArrayList<Parameter>();
action1Parameters.add(new Parameter().setType(operationType1).setCollection(false));
action =
new Action().setName(operationName1.getName()).setBound(true).setParameters(action1Parameters);
actions.add(action);
List<Parameter> action2Parameters = new ArrayList<Parameter>();
action2Parameters.add(new Parameter().setType(operationType1).setCollection(true));
action =
new Action().setName(operationName1.getName()).setBound(true).setParameters(action2Parameters);
actions.add(action);
when(provider.getActions(operationName1)).thenReturn(actions);
List<Function> functions = new ArrayList<Function>();
Function function = new Function().setName(operationName1.getName());
functions.add(function);
List<Parameter> function1Parameters = new ArrayList<Parameter>();
function1Parameters.add(new Parameter().setType(operationType1).setName("a"));
function = new Function().setName(operationName1.getName()).setParameters(function1Parameters);
functions.add(function);
List<Parameter> function2Parameters = new ArrayList<Parameter>();
function2Parameters.add(new Parameter().setType(operationType1).setName("b"));
function = new Function().setName(operationName1.getName()).setParameters(function2Parameters);
functions.add(function);
List<Parameter> function3Parameters = new ArrayList<Parameter>();
function3Parameters.add(new Parameter().setName("a").setType(operationType1));
function3Parameters.add(new Parameter().setName("b").setType(operationType1));
function = new Function().setName(operationName1.getName()).setParameters(function3Parameters).setBound(true);
functions.add(function);
List<Parameter> function4Parameters = new ArrayList<Parameter>();
function4Parameters.add(new Parameter().setName("a").setType(operationType2));
function4Parameters.add(new Parameter().setName("b").setType(operationType2));
function = new Function().setName(operationName1.getName()).setParameters(function4Parameters).setBound(true);
functions.add(function);
when(provider.getFunctions(operationName1)).thenReturn(functions);
List<Function> badFunctions = new ArrayList<Function>();
Function badFunction = new Function().setName(operationName1.getName()).setBound(true).setParameters(null);
badFunctions.add(badFunction);
when(provider.getFunctions(badOperationName)).thenReturn(badFunctions);
edm = new EdmProviderImpl(provider);
}
@Test
public void simpleActionGet() {
EdmAction action = edm.getUnboundAction(operationName1);
assertNotNull(action);
assertEquals(operationName1.getNamespace(), action.getNamespace());
assertEquals(operationName1.getName(), action.getName());
assertNull(edm.getUnboundAction(wrongOperationName));
}
@Test
public void boundActionOverloading() {
EdmAction action = edm.getBoundAction(operationName1, operationType1, false);
assertNotNull(action);
assertEquals(operationName1.getNamespace(), action.getNamespace());
assertEquals(operationName1.getName(), action.getName());
assertTrue(action == edm.getBoundAction(operationName1, operationType1, false));
EdmAction action2 = edm.getBoundAction(operationName1, operationType1, true);
assertNotNull(action2);
assertEquals(operationName1.getNamespace(), action2.getNamespace());
assertEquals(operationName1.getName(), action2.getName());
assertTrue(action2 == edm.getBoundAction(operationName1, operationType1, true));
assertNotSame(action, action2);
}
@Test
public void simpleFunctionGet() {
EdmFunction function = edm.getUnboundFunction(operationName1, null);
assertNotNull(function);
assertEquals(operationName1.getNamespace(), function.getNamespace());
assertEquals(operationName1.getName(), function.getName());
EdmFunction function2 = edm.getUnboundFunction(operationName1, new ArrayList<String>());
assertNotNull(function2);
assertEquals(operationName1.getNamespace(), function2.getNamespace());
assertEquals(operationName1.getName(), function2.getName());
assertEquals(function, function2);
assertNull(edm.getUnboundFunction(wrongOperationName, new ArrayList<String>()));
}
@Test
public void functionOverloading() {
ArrayList<String> parameter1Names = new ArrayList<String>();
parameter1Names.add("a");
List<String> parameter2Names = new ArrayList<String>();
parameter2Names.add("b");
EdmFunction function = edm.getUnboundFunction(operationName1, new ArrayList<String>());
assertNotNull(function);
assertFalse(function.isBound());
EdmFunction function1 = edm.getUnboundFunction(operationName1, parameter1Names);
assertNotNull(function1);
assertFalse(function1.isBound());
assertFalse(function == function1);
assertNotSame(function, function1);
EdmFunction function2 = edm.getUnboundFunction(operationName1, parameter2Names);
assertNotNull(function2);
assertFalse(function2.isBound());
assertFalse(function1 == function2);
assertNotSame(function1, function2);
EdmFunction function3 = edm.getBoundFunction(operationName1, operationType1, false, parameter2Names);
assertNotNull(function3);
assertTrue(function3.isBound());
EdmFunction function4 = edm.getBoundFunction(operationName1, operationType2, false, parameter2Names);
assertNotNull(function4);
assertTrue(function4.isBound());
assertFalse(function3 == function4);
assertNotSame(function3, function4);
assertFalse(function1 == function3);
assertFalse(function1 == function4);
assertFalse(function2 == function3);
assertFalse(function2 == function4);
assertNotSame(function1, function3);
assertNotSame(function1, function4);
assertNotSame(function2, function3);
assertNotSame(function2, function4);
}
@Test(expected = EdmException.class)
public void noParametersAtBoundFunctionReslutsInException() {
edm.getBoundFunction(badOperationName, operationType1, true, null);
}
}