package com.sap.core.odata.processor.core.jpa.edm;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import com.sap.core.odata.api.edm.FullQualifiedName;
import com.sap.core.odata.api.edm.provider.Association;
import com.sap.core.odata.api.edm.provider.EntityContainer;
import com.sap.core.odata.api.edm.provider.EntityContainerInfo;
import com.sap.core.odata.api.edm.provider.Schema;
import com.sap.core.odata.api.exception.ODataException;
import com.sap.core.odata.processor.core.jpa.common.ODataJPATestConstants;
import com.sap.core.odata.processor.core.jpa.mock.ODataJPAContextMock;
import com.sap.core.odata.processor.core.jpa.model.JPAEdmModel;
public class ODataJPAEdmProviderNegativeTest {
private static ODataJPAEdmProvider edmProvider;
@BeforeClass
public static void setup() {
edmProvider = new ODataJPAEdmProvider();
try {
Class<? extends ODataJPAEdmProvider> clazz = edmProvider.getClass();
Field field = clazz.getDeclaredField("schemas");
field.setAccessible(true);
List<Schema> schemas = new ArrayList<Schema>();
schemas.add(new Schema().setNamespace("salesorderprocessing")); //Empty Schema
field.set(edmProvider, schemas);
field = clazz.getDeclaredField("oDataJPAContext");
field.setAccessible(true);
field.set(edmProvider, ODataJPAContextMock.mockODataJPAContext());
field = clazz.getDeclaredField("jpaEdmModel");
field.setAccessible(true);
field.set(edmProvider, new JPAEdmModel(null, null));
} catch (IllegalArgumentException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
} catch (IllegalAccessException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
} catch (NoSuchFieldException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
} catch (SecurityException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
@Test
public void testNullGetEntityContainerInfo() {
EntityContainerInfo entityContainer = null;
try {
entityContainer = edmProvider
.getEntityContainerInfo("salesorderprocessingContainer");
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
assertNull(entityContainer);
}
@Test
public void testNullGetEntityType() {
FullQualifiedName entityTypeName = new FullQualifiedName(
"salesorderprocessing", "SalesOrderHeader");
try {
assertNull(edmProvider.getEntityType(entityTypeName));
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
@Test
public void testNullGetComplexType() {
FullQualifiedName complexTypeName = new FullQualifiedName(
"salesorderprocessing", "Address");
try {
assertNull(edmProvider.getComplexType(complexTypeName));
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
@Test
public void testGetAssociationFullQualifiedName() {
Association association = null;
try {
association = edmProvider.getAssociation(new FullQualifiedName(
"salesorderprocessing", "SalesOrderHeader_SalesOrderItem"));
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
assertNull(association);
}
@Test
public void testGetEntitySet() {
try {
assertNull(edmProvider.getEntitySet(
"salesorderprocessingContainer", "SalesOrderHeaders"));
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
@Test
public void testGetAssociationSet() {
try {
assertNull(edmProvider.getAssociationSet(
"salesorderprocessingContainer", new FullQualifiedName(
"salesorderprocessing",
"SalesOrderHeader_SalesOrderItem"),
"SalesOrderHeaders", "SalesOrderHeader"));
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
@Test
public void testNullGetFunctionImport() {
try {
assertNull(edmProvider.getFunctionImport(
"salesorderprocessingContainer",
"SalesOrder_FunctionImport1"));
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
@Test
public void testNullGetFunctionImport2() {
try {
ODataJPAEdmProvider provider = new ODataJPAEdmProvider();
try {
Class<? extends ODataJPAEdmProvider> clazz = provider.getClass();
Field field = clazz.getDeclaredField("schemas");
field.setAccessible(true);
List<Schema> schemas = new ArrayList<Schema>();
Schema schema = new Schema().setNamespace("salesorderprocessing");
EntityContainer container = new EntityContainer().setName("salesorderprocessingContainer");
List<EntityContainer> containerList = new ArrayList<EntityContainer>();
containerList.add(container); // Empty Container
schema.setEntityContainers(containerList);
schemas.add(schema); //Empty Schema
field.set(provider, schemas);
} catch (IllegalArgumentException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
} catch (IllegalAccessException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
} catch (NoSuchFieldException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
} catch (SecurityException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
assertNull(provider.getFunctionImport(
"salesorderprocessingContainer",
"SalesOrder_FunctionImport1"));
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
@Test
public void testGetSchemas() {
try {
assertNotNull(edmProvider.getSchemas());
} catch (ODataException e) {
fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage()
+ ODataJPATestConstants.EXCEPTION_MSG_PART_2);
}
}
}