| /******************************************************************************* |
| * 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.jpa.processor.core.access.data; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.fail; |
| |
| import java.lang.reflect.Field; |
| import java.lang.reflect.InvocationTargetException; |
| import java.lang.reflect.Method; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.apache.olingo.odata2.api.ODataCallback; |
| import org.apache.olingo.odata2.api.edm.EdmEntityType; |
| import org.apache.olingo.odata2.api.edm.EdmException; |
| import org.apache.olingo.odata2.api.edm.EdmNavigationProperty; |
| import org.apache.olingo.odata2.api.ep.callback.WriteEntryCallbackContext; |
| import org.apache.olingo.odata2.api.ep.callback.WriteEntryCallbackResult; |
| import org.apache.olingo.odata2.api.ep.callback.WriteFeedCallbackContext; |
| import org.apache.olingo.odata2.api.ep.callback.WriteFeedCallbackResult; |
| import org.apache.olingo.odata2.api.exception.ODataApplicationException; |
| import org.apache.olingo.odata2.api.uri.ExpandSelectTreeNode; |
| import org.apache.olingo.odata2.api.uri.NavigationPropertySegment; |
| import org.apache.olingo.odata2.jpa.processor.core.callback.JPAExpandCallBack; |
| import org.apache.olingo.odata2.jpa.processor.core.common.ODataJPATestConstants; |
| import org.apache.olingo.odata2.jpa.processor.core.mock.data.EdmMockUtil; |
| import org.easymock.EasyMock; |
| import org.junit.Test; |
| |
| public class JPAExpandCallBackTest { |
| |
| @Test |
| public void testRetrieveEntryResult() { |
| JPAExpandCallBack callBack = getJPAExpandCallBackObject(); |
| WriteEntryCallbackContext writeFeedContext = EdmMockUtil.getWriteEntryCallBackContext(); |
| try { |
| Field field = callBack.getClass().getDeclaredField("nextEntitySet"); |
| field.setAccessible(true); |
| field.set(callBack, EdmMockUtil.mockTargetEntitySet()); |
| WriteEntryCallbackResult result = callBack.retrieveEntryResult(writeFeedContext); |
| assertEquals(1, result.getEntryData().size()); |
| } catch (SecurityException 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 (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 (ODataApplicationException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } |
| } |
| |
| @Test |
| public void testRetrieveFeedResult() { |
| JPAExpandCallBack callBack = getJPAExpandCallBackObject(); |
| WriteFeedCallbackContext writeFeedContext = EdmMockUtil.getWriteFeedCallBackContext(); |
| try { |
| Field field = callBack.getClass().getDeclaredField("nextEntitySet"); |
| field.setAccessible(true); |
| field.set(callBack, EdmMockUtil.mockTargetEntitySet()); |
| WriteFeedCallbackResult result = callBack.retrieveFeedResult(writeFeedContext); |
| assertEquals(2, result.getFeedData().size()); |
| } catch (SecurityException 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 (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 (ODataApplicationException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } |
| } |
| |
| @Test |
| public void testGetCallbacks() { |
| Map<String, ODataCallback> callBacks = null; |
| try { |
| URI baseUri = |
| new URI("http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/SalesOrderProcessing.svc/"); |
| ExpandSelectTreeNode expandSelectTreeNode = EdmMockUtil.mockExpandSelectTreeNode(); |
| List<ArrayList<NavigationPropertySegment>> expandList = EdmMockUtil.getExpandList(); |
| callBacks = JPAExpandCallBack.getCallbacks(baseUri, expandSelectTreeNode, expandList); |
| } catch (URISyntaxException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } catch (EdmException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } |
| assertEquals(1, callBacks.size()); |
| |
| } |
| |
| @SuppressWarnings("unchecked") |
| @Test |
| public void testGetNextNavigationProperty() { |
| JPAExpandCallBack callBack = getJPAExpandCallBackObject(); |
| List<ArrayList<NavigationPropertySegment>> expandList = EdmMockUtil.getExpandList(); |
| ArrayList<NavigationPropertySegment> expands = expandList.get(0); |
| expands.add(EdmMockUtil.mockThirdNavigationPropertySegment()); |
| List<EdmNavigationProperty> result = null; |
| try { |
| Field field = callBack.getClass().getDeclaredField("expandList"); |
| field.setAccessible(true); |
| field.set(callBack, expandList); |
| Class<?>[] formalParams = { EdmEntityType.class, EdmNavigationProperty.class }; |
| Object[] actualParams = { EdmMockUtil.mockSourceEdmEntityType(), EdmMockUtil.mockNavigationProperty() }; |
| Method method = callBack.getClass().getDeclaredMethod("getNextNavigationProperty", formalParams); |
| method.setAccessible(true); |
| result = (List<EdmNavigationProperty>) method.invoke(callBack, actualParams); |
| assertEquals("MaterialDetails", result.get(0).getName()); |
| |
| } catch (SecurityException 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 (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 (NoSuchMethodException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } catch (InvocationTargetException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } catch (EdmException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } |
| } |
| |
| @SuppressWarnings("unchecked") |
| @Test |
| public void testGetNextNavigationPropertyWithNumber() { |
| JPAExpandCallBack callBack = getJPAExpandCallBackObject(); |
| List<ArrayList<NavigationPropertySegment>> expandList = EdmMockUtil.getExpandList(); |
| ArrayList<NavigationPropertySegment> expands = new ArrayList<NavigationPropertySegment>(); |
| expands.add(EdmMockUtil.mockNavigationPropertySegment("2")); |
| expandList.add(expands); |
| expands.add(EdmMockUtil.mockThirdNavigationPropertySegment()); |
| List<EdmNavigationProperty> result = null; |
| |
| try { |
| Field field = callBack.getClass().getDeclaredField("expandList"); |
| field.setAccessible(true); |
| field.set(callBack, expandList); |
| Class<?>[] formalParams = { EdmEntityType.class, EdmNavigationProperty.class }; |
| Object[] actualParams = { EdmMockUtil.mockSourceEdmEntityType(), EdmMockUtil.mockNavigationProperty() }; |
| Method method = callBack.getClass().getDeclaredMethod("getNextNavigationProperty", formalParams); |
| method.setAccessible(true); |
| result = (List<EdmNavigationProperty>) method.invoke(callBack, actualParams); |
| assertEquals("MaterialDetails", result.get(0).getName()); |
| |
| } catch (SecurityException 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 (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 (NoSuchMethodException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } catch (InvocationTargetException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } catch (EdmException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } |
| } |
| |
| private JPAExpandCallBack getJPAExpandCallBackObject() { |
| Map<String, ODataCallback> callBacks = null; |
| try { |
| URI baseUri = |
| new URI("http://localhost:8080/org.apache.olingo.odata2.processor.ref.web/SalesOrderProcessing.svc/"); |
| ExpandSelectTreeNode expandSelectTreeNode = EdmMockUtil.mockExpandSelectTreeNode(); |
| List<ArrayList<NavigationPropertySegment>> expandList = EdmMockUtil.getExpandList(); |
| callBacks = JPAExpandCallBack.getCallbacks(baseUri, expandSelectTreeNode, expandList); |
| } catch (URISyntaxException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } catch (EdmException e) { |
| fail(ODataJPATestConstants.EXCEPTION_MSG_PART_1 + e.getMessage() + ODataJPATestConstants.EXCEPTION_MSG_PART_2); |
| } |
| return (JPAExpandCallBack) callBacks.get("SalesOrderLineItemDetails"); |
| } |
| |
| } |