/*******************************************************************************
* 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.odata2.processor.core.jpa.jpql;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import org.apache.olingo.odata2.api.edm.EdmEntitySet;
import org.apache.olingo.odata2.api.edm.EdmEntityType;
import org.apache.olingo.odata2.api.edm.EdmException;
import org.apache.olingo.odata2.api.edm.EdmMapping;
import org.apache.olingo.odata2.api.edm.EdmProperty;
import org.apache.olingo.odata2.api.edm.EdmType;
import org.apache.olingo.odata2.api.uri.KeyPredicate;
import org.apache.olingo.odata2.api.uri.SelectItem;
import org.apache.olingo.odata2.api.uri.info.GetEntityUriInfo;
import org.apache.olingo.odata2.processor.api.jpa.exception.ODataJPAModelException;
import org.apache.olingo.odata2.processor.api.jpa.exception.ODataJPARuntimeException;
import org.apache.olingo.odata2.processor.api.jpa.jpql.JPQLContext;
import org.apache.olingo.odata2.processor.api.jpa.jpql.JPQLContextType;
import org.apache.olingo.odata2.processor.core.jpa.jpql.JPQLSelectSingleContext.JPQLSelectSingleContextBuilder;
import org.easymock.EasyMock;
import org.junit.Test;
public class JPQLSelectSingleContextImplTest {
private static String entityTypeName = "MockEntity";
private static String[] fields = { "Field1", "Field2" };
private static List<KeyPredicate> keyPredicates;
private static JPQLSelectSingleContextBuilder builder;
private static JPQLSelectSingleContext selectContext;
private void buildContextBuilder(final boolean isSelectNull) {
builder = null;
selectContext = null;
keyPredicates = new ArrayList<KeyPredicate>();
GetEntityUriInfo resultsView = EasyMock.createMock(GetEntityUriInfo.class);
EdmEntitySet entitySet = EasyMock.createMock(EdmEntitySet.class);
EdmEntityType entityType = EasyMock.createMock(EdmEntityType.class);
KeyPredicate keyPredicate = EasyMock.createMock(KeyPredicate.class);
EdmProperty kpProperty = EasyMock.createMock(EdmProperty.class);
EdmType edmType = EasyMock.createMock(EdmType.class);
EasyMock.expect(keyPredicate.getLiteral()).andStubReturn("1");
try {
EasyMock.expect(kpProperty.getName()).andStubReturn("Field1");
EasyMock.expect(kpProperty.getType()).andStubReturn(edmType);
} catch (EdmException e2) {
fail("this should not happen");
}
EasyMock.expect(keyPredicate.getProperty()).andStubReturn(kpProperty);
EasyMock.replay(edmType, kpProperty, keyPredicate);
keyPredicates.add(keyPredicate);
int i = 0;
try {
List<SelectItem> selectItemList = new ArrayList<SelectItem>(2);
do {
EdmMapping edmMapping = EasyMock.createMock(EdmMapping.class);
EasyMock.expect(edmMapping.getInternalName()).andStubReturn(fields[i]);
EdmProperty edmProperty = EasyMock.createMock(EdmProperty.class);
EasyMock.expect(edmProperty.getMapping()).andStubReturn(edmMapping);
EasyMock.replay(edmMapping, edmProperty);
SelectItem selectItem = EasyMock.createMock(SelectItem.class);
EasyMock.expect(selectItem.getProperty()).andStubReturn(edmProperty);
EasyMock.replay(selectItem);
selectItemList.add(selectItem);
} while (++i < 2);
EasyMock.expect(entityType.getMapping()).andStubReturn(null);
EasyMock.expect(entityType.getName()).andStubReturn(entityTypeName);
EasyMock.replay(entityType);
EasyMock.expect(entitySet.getEntityType()).andStubReturn(entityType);
EasyMock.replay(entitySet);
EasyMock.expect(resultsView.getTargetEntitySet()).andStubReturn(entitySet);
if (isSelectNull) {
selectItemList = null;
}
EasyMock.expect(resultsView.getSelect()).andStubReturn(selectItemList);
ArrayList<KeyPredicate> arrayList = new ArrayList<KeyPredicate>();
arrayList.add(keyPredicate);
EasyMock.expect(resultsView.getKeyPredicates()).andStubReturn(arrayList);
EasyMock.replay(resultsView);
} catch (EdmException e1) {
fail("Exception not Expected");
}
try {
builder = (JPQLSelectSingleContextBuilder) JPQLContext.createBuilder(JPQLContextType.SELECT_SINGLE, resultsView);
selectContext = (JPQLSelectSingleContext) builder.build();
} catch (ODataJPAModelException e) {
fail("Exception not Expected");
} catch (ODataJPARuntimeException e) {
fail("Runtime Exception thrown");
}
}
@Test
public void testEntityNameThrowingException() {
// buildSelectContext(false, false, false);
GetEntityUriInfo resultsView = EasyMock.createMock(GetEntityUriInfo.class);
EdmEntitySet entitySet = EasyMock.createMock(EdmEntitySet.class);
EdmEntityType entityType = EasyMock.createMock(EdmEntityType.class);
try {
EasyMock.expect(entityType.getName()).andStubThrow(new EdmException(null));
EasyMock.expect(entitySet.getEntityType()).andStubThrow(new EdmException(null));
} catch (EdmException e1) {
// throw new ODataException();
}
EasyMock.replay(entityType);
EasyMock.replay(entitySet);
EasyMock.expect(resultsView.getTargetEntitySet()).andStubReturn(entitySet);
EasyMock.expect(resultsView.getSelect()).andStubReturn(null);
EasyMock.expect(resultsView.getFilter()).andStubReturn(null);
EasyMock.replay(resultsView);
try {
JPQLSelectSingleContextBuilder builder1 =
(JPQLSelectSingleContextBuilder) JPQLContext.createBuilder(JPQLContextType.SELECT_SINGLE, resultsView);
builder1.build();
fail("Should not come here");
} catch (ODataJPAModelException e) {
fail();
} catch (ODataJPARuntimeException e) {
assertTrue(true);
}
}
@Test
public void testSlectedFieldsAsNull() {
buildContextBuilder(true);
try {
selectContext = (JPQLSelectSingleContext) builder.build();
assertEquals("E2", selectContext.getSelectExpression());
} catch (ODataJPAModelException e) {
fail();
} catch (ODataJPARuntimeException e) {
fail();
}
}
@Test
public void getKeyPredicates() {
buildContextBuilder(false);
assertEquals(keyPredicates.size(), selectContext.getKeyPredicates().size());
assertEquals(keyPredicates, selectContext.getKeyPredicates());
}
@Test
public void testGetJPAEntityName() {
buildContextBuilder(false);
assertEquals(JPQLSelectSingleContextImplTest.entityTypeName, selectContext.getJPAEntityName());
}
@Test
public void testGetType() {
buildContextBuilder(false);
assertEquals(JPQLContextType.SELECT_SINGLE, selectContext.getType());
}
@Test
public void testCreateBuilder() {
buildContextBuilder(false);
assertEquals(JPQLSelectSingleContextBuilder.class.toString(), builder.getClass().toString());
}
}