http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java index dfbd55b..ef59092 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java @@ -31,9 +31,11 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TimeZone; import org.apache.olingo.odata2.api.edm.Edm; import org.apache.olingo.odata2.api.edm.EdmConcurrencyMode; @@ -51,6 +53,7 @@ import org.apache.olingo.odata2.api.exception.ODataException; import org.apache.olingo.odata2.api.exception.ODataMessageException; import org.apache.olingo.odata2.api.processor.ODataResponse; import org.apache.olingo.odata2.api.xml.XMLStreamException; +import org.apache.olingo.odata2.api.uri.ExpandSelectTreeNode; import org.apache.olingo.odata2.core.commons.ContentType; import org.apache.olingo.odata2.core.ep.AbstractProviderTest; import org.apache.olingo.odata2.core.ep.AtomEntityProvider; @@ -73,6 +76,250 @@ public class AtomEntryProducerTest extends AbstractProviderTest { } @Test + public void contentOnly() throws Exception { + final EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(BASE_URI).contentOnly(true).build(); + + AtomEntityProvider ser = createAtomEntityProvider(); + ODataResponse response = + ser.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"), employeeData, + properties); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + + assertXpathNotExists("/a:entry/a:id", xmlString); + assertXpathNotExists("/a:entry/a:title", xmlString); + assertXpathNotExists("/a:entry/a:updated", xmlString); + assertXpathNotExists("/a:entry/a:category", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Team\"and @href=\"Employees('1')/ne_Team\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Room\"and @href=\"Employees('1')/ne_Room\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Manager\" and @href=\"Employees('1')/ne_Manager\"]", xmlString); + assertXpathNotExists("/a:entry/a:content", xmlString); + + assertXpathExists("/a:entry/m:properties", xmlString); + } + + @Test + public void contentOnlyRoom() throws Exception { + EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms"); + List<String> selectedPropertyNames = new ArrayList<String>(); + selectedPropertyNames.add("Name"); + ExpandSelectTreeNode expandSelectTree = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedPropertyNames).build(); + final EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(BASE_URI).contentOnly(true).expandSelectTree(expandSelectTree) + .build(); + + Map<String, Object> localRoomData = new HashMap<String, Object>(); + localRoomData.put("Name", "Neu Schwanstein"); + + AtomEntityProvider ser = createAtomEntityProvider(); + ODataResponse response = ser.writeEntry(entitySet, localRoomData, properties); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + + assertXpathNotExists("/a:entry/a:id", xmlString); + assertXpathNotExists("/a:entry/a:title", xmlString); + assertXpathNotExists("/a:entry/a:updated", xmlString); + assertXpathNotExists("/a:entry/a:category", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"nr_Employees\"and @href=\"Rooms('1')/nr_Employees\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"nr_Building\"and @href=\"Rooms('1')/nr_Building\"]", xmlString); + + assertXpathExists("/a:entry/a:content/m:properties/d:Name", xmlString); + } + + @Test + public void contentOnlyRoomSelectedOrExpandedLinksMustBeIgnored() throws Exception { + EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms"); + List<String> selectedPropertyNames = new ArrayList<String>(); + selectedPropertyNames.add("Name"); + List<String> navigationPropertyNames = new ArrayList<String>(); + navigationPropertyNames.add("nr_Employees"); + navigationPropertyNames.add("nr_Building"); + ExpandSelectTreeNode expandSelectTree = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedPropertyNames).expandedLinks( + navigationPropertyNames).build(); + final EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(BASE_URI).contentOnly(true).expandSelectTree(expandSelectTree) + .build(); + + Map<String, Object> localRoomData = new HashMap<String, Object>(); + localRoomData.put("Name", "Neu Schwanstein"); + + AtomEntityProvider ser = createAtomEntityProvider(); + ODataResponse response = ser.writeEntry(entitySet, localRoomData, properties); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + + assertXpathNotExists("/a:entry/a:id", xmlString); + assertXpathNotExists("/a:entry/a:title", xmlString); + assertXpathNotExists("/a:entry/a:updated", xmlString); + assertXpathNotExists("/a:entry/a:category", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"nr_Employees\"and @href=\"Rooms('1')/nr_Employees\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"nr_Building\"and @href=\"Rooms('1')/nr_Building\"]", xmlString); + + assertXpathExists("/a:entry/a:content/m:properties/d:Name", xmlString); + } + + @Test + public void contentOnlyRoomWithAdditionalLink() throws Exception { + EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms"); + List<String> selectedPropertyNames = new ArrayList<String>(); + selectedPropertyNames.add("Name"); + ExpandSelectTreeNode expandSelectTree = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedPropertyNames).build(); + Map<String, Map<String, Object>> additinalLinks = new HashMap<String, Map<String, Object>>(); + Map<String, Object> buildingLink = new HashMap<String, Object>(); + buildingLink.put("Id", "1"); + additinalLinks.put("nr_Building", buildingLink); + final EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(BASE_URI).contentOnly(true).expandSelectTree(expandSelectTree) + .additionalLinks(additinalLinks).build(); + + Map<String, Object> localRoomData = new HashMap<String, Object>(); + localRoomData.put("Name", "Neu Schwanstein"); + + AtomEntityProvider ser = createAtomEntityProvider(); + ODataResponse response = ser.writeEntry(entitySet, localRoomData, properties); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + + assertXpathNotExists("/a:entry/a:id", xmlString); + assertXpathNotExists("/a:entry/a:title", xmlString); + assertXpathNotExists("/a:entry/a:updated", xmlString); + assertXpathNotExists("/a:entry/a:category", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"nr_Employees\"and @href=\"Rooms('1')/nr_Employees\"]", xmlString); + + assertXpathExists("/a:entry/a:content/m:properties/d:Name", xmlString); + assertXpathExists("/a:entry/a:link[@title=\"nr_Building\"and @href=\"Buildings('1')\"]", xmlString); + } + + @Test + public void contentOnlyWithoutKey() throws Exception { + EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); + List<String> selectedPropertyNames = new ArrayList<String>(); + selectedPropertyNames.add("ManagerId"); + ExpandSelectTreeNode select = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedPropertyNames).build(); + + final EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(BASE_URI).contentOnly(true).expandSelectTree(select).build(); + + Map<String, Object> localEmployeeData = new HashMap<String, Object>(); + localEmployeeData.put("ManagerId", "1"); + + AtomEntityProvider ser = createAtomEntityProvider(); + ODataResponse response = + ser.writeEntry(entitySet, localEmployeeData, + properties); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + + assertXpathNotExists("/a:entry/a:id", xmlString); + assertXpathNotExists("/a:entry/a:title", xmlString); + assertXpathNotExists("/a:entry/a:updated", xmlString); + assertXpathNotExists("/a:entry/a:category", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Manager\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Team\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Room\"]", xmlString); + assertXpathNotExists("/a:entry/a:content", xmlString); + + assertXpathExists("/a:entry/m:properties", xmlString); + assertXpathNotExists("/a:entry/m:properties/d:EmployeeId", xmlString); + assertXpathExists("/a:entry/m:properties/d:ManagerId", xmlString); + } + + @Test + public void contentOnlySelectedOrExpandedLinksMustBeIgnored() throws Exception { + EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); + List<String> selectedPropertyNames = new ArrayList<String>(); + selectedPropertyNames.add("ManagerId"); + + List<String> expandedNavigationNames = new ArrayList<String>(); + expandedNavigationNames.add("ne_Manager"); + expandedNavigationNames.add("ne_Team"); + expandedNavigationNames.add("ne_Room"); + + ExpandSelectTreeNode select = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedPropertyNames).expandedLinks( + expandedNavigationNames).build(); + + final EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(BASE_URI).contentOnly(true).expandSelectTree(select).build(); + + Map<String, Object> localEmployeeData = new HashMap<String, Object>(); + localEmployeeData.put("ManagerId", "1"); + + AtomEntityProvider ser = createAtomEntityProvider(); + ODataResponse response = + ser.writeEntry(entitySet, localEmployeeData, + properties); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + + assertXpathNotExists("/a:entry/a:id", xmlString); + assertXpathNotExists("/a:entry/a:title", xmlString); + assertXpathNotExists("/a:entry/a:updated", xmlString); + assertXpathNotExists("/a:entry/a:category", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Manager\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Team\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Room\"]", xmlString); + assertXpathNotExists("/a:entry/a:content", xmlString); + + assertXpathExists("/a:entry/m:properties", xmlString); + assertXpathNotExists("/a:entry/m:properties/d:EmployeeId", xmlString); + assertXpathExists("/a:entry/m:properties/d:ManagerId", xmlString); + } + + @Test + public void contentOnlyWithAdditinalLink() throws Exception { + EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); + List<String> selectedPropertyNames = new ArrayList<String>(); + selectedPropertyNames.add("ManagerId"); + ExpandSelectTreeNode select = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedPropertyNames).build(); + + Map<String, Map<String, Object>> additinalLinks = new HashMap<String, Map<String, Object>>(); + Map<String, Object> managerLink = new HashMap<String, Object>(); + managerLink.put("EmployeeId", "1"); + additinalLinks.put("ne_Manager", managerLink); + final EntityProviderWriteProperties properties = + EntityProviderWriteProperties.serviceRoot(BASE_URI).contentOnly(true).expandSelectTree(select).additionalLinks( + additinalLinks).build(); + + Map<String, Object> localEmployeeData = new HashMap<String, Object>(); + localEmployeeData.put("ManagerId", "1"); + + AtomEntityProvider ser = createAtomEntityProvider(); + ODataResponse response = + ser.writeEntry(entitySet, localEmployeeData, + properties); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + + assertXpathNotExists("/a:entry/a:id", xmlString); + assertXpathNotExists("/a:entry/a:title", xmlString); + assertXpathNotExists("/a:entry/a:updated", xmlString); + assertXpathNotExists("/a:entry/a:category", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Team\"]", xmlString); + assertXpathNotExists("/a:entry/a:link[@title=\"ne_Room\"]", xmlString); + assertXpathNotExists("/a:entry/a:content", xmlString); + + assertXpathExists("/a:entry/m:properties", xmlString); + assertXpathNotExists("/a:entry/m:properties/d:EmployeeId", xmlString); + assertXpathExists("/a:entry/m:properties/d:ManagerId", xmlString); + + assertXpathExists("/a:entry/a:link[@href=\"Managers('1')\" and @title=\"ne_Manager\"]", xmlString); + } + + @Test public void noneSyndicationKeepInContentFalseMustNotShowInProperties() throws Exception { // prepare Mock EdmEntitySet employeesSet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); @@ -320,10 +567,34 @@ public class AtomEntryProducerTest extends AbstractProviderTest { public void serializeAtomMediaResourceWithMimeType() throws IOException, XpathException, SAXException, XMLStreamException, ODataException { AtomEntityProvider ser = createAtomEntityProvider(); - EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("abc").build(); + EntityProviderWriteProperties properties = EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); + Map<String, Object> localEmployeeData = new HashMap<String, Object>(); + + Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + date.clear(); + date.set(1999, 0, 1); + + localEmployeeData.put("EmployeeId", "1"); + localEmployeeData.put("ImmageUrl", null); + localEmployeeData.put("ManagerId", "1"); + localEmployeeData.put("Age", new Integer(52)); + localEmployeeData.put("RoomId", "1"); + localEmployeeData.put("EntryDate", date); + localEmployeeData.put("TeamId", "42"); + localEmployeeData.put("EmployeeName", "Walter Winter"); + localEmployeeData.put("getImageType", "abc"); + + Map<String, Object> locationData = new HashMap<String, Object>(); + Map<String, Object> cityData = new HashMap<String, Object>(); + cityData.put("PostalCode", "33470"); + cityData.put("CityName", "Duckburg"); + locationData.put("City", cityData); + locationData.put("Country", "Calisota"); + + localEmployeeData.put("Location", locationData); ODataResponse response = - ser.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"), employeeData, + ser.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"), + localEmployeeData, properties); String xmlString = verifyResponse(response); @@ -367,10 +638,34 @@ public class AtomEntryProducerTest extends AbstractProviderTest { public void serializeEmployeeAndCheckOrderOfTags() throws IOException, XpathException, SAXException, XMLStreamException, ODataException { AtomEntityProvider ser = createAtomEntityProvider(); - EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("abc").build(); + EntityProviderWriteProperties properties = EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); + Map<String, Object> localEmployeeData = new HashMap<String, Object>(); + + Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + date.clear(); + date.set(1999, 0, 1); + + localEmployeeData.put("EmployeeId", "1"); + localEmployeeData.put("ImmageUrl", null); + localEmployeeData.put("ManagerId", "1"); + localEmployeeData.put("Age", new Integer(52)); + localEmployeeData.put("RoomId", "1"); + localEmployeeData.put("EntryDate", date); + localEmployeeData.put("TeamId", "42"); + localEmployeeData.put("EmployeeName", "Walter Winter"); + localEmployeeData.put("getImageType", "abc"); + + Map<String, Object> locationData = new HashMap<String, Object>(); + Map<String, Object> cityData = new HashMap<String, Object>(); + cityData.put("PostalCode", "33470"); + cityData.put("CityName", "Duckburg"); + locationData.put("City", cityData); + locationData.put("Country", "Calisota"); + + localEmployeeData.put("Location", locationData); ODataResponse response = - ser.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"), employeeData, + ser.writeEntry(MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"), + localEmployeeData, properties); String xmlString = verifyResponse(response); @@ -402,7 +697,7 @@ public class AtomEntryProducerTest extends AbstractProviderTest { XMLStreamException, ODataException { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("abc").build(); + EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); EdmEntitySet employeeEntitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); ODataResponse response = ser.writeEntry(employeeEntitySet, employeeData, properties); String xmlString = verifyResponse(response); @@ -425,7 +720,7 @@ public class AtomEntryProducerTest extends AbstractProviderTest { XMLStreamException, ODataException { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("abc").build(); + EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); EdmEntitySet employeeEntitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); // set "keepInContent" to false for EntryDate @@ -779,7 +1074,6 @@ public class AtomEntryProducerTest extends AbstractProviderTest { EdmMapping mapping = employeesSet.getEntityType().getMapping(); when(mapping.getMediaResourceSourceKey()).thenReturn(mediaResourceSourceKey); when(mapping.getMediaResourceMimeTypeKey()).thenReturn(mediaResourceMimeTypeKey); - when(mapping.getMimeType()).thenReturn(null); ODataResponse response = ser.writeEntry(employeesSet, localEmployeeData, DEFAULT_PROPERTIES); String xmlString = verifyResponse(response); @@ -837,25 +1131,25 @@ public class AtomEntryProducerTest extends AbstractProviderTest { assertXpathNotExists("/a:entry/a:content[@src=\"http://localhost:8080/images/image1\"]", xmlString); } - @Test - public void assureGetMimeTypeWinsOverGetMediaResourceMimeTypeKey() throws Exception { - // Keep this test till version 1.2 - AtomEntityProvider ser = createAtomEntityProvider(); - Map<String, Object> localEmployeeData = new HashMap<String, Object>(employeeData); - String mediaResourceMimeTypeKey = "~type"; - localEmployeeData.put(mediaResourceMimeTypeKey, "wrong"); - String originalMimeTypeKey = "~originalType"; - localEmployeeData.put(originalMimeTypeKey, "right"); - EdmEntitySet employeesSet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); - EdmMapping mapping = employeesSet.getEntityType().getMapping(); - when(mapping.getMediaResourceMimeTypeKey()).thenReturn(mediaResourceMimeTypeKey); - when(mapping.getMimeType()).thenReturn(originalMimeTypeKey); - ODataResponse response = ser.writeEntry(employeesSet, localEmployeeData, DEFAULT_PROPERTIES); - String xmlString = verifyResponse(response); - - assertXpathExists("/a:entry/a:content[@type=\"right\"]", xmlString); - assertXpathNotExists("/a:entry/a:content[@type=\"wrong\"]", xmlString); - } +// @Test +// public void assureGetMimeTypeWinsOverGetMediaResourceMimeTypeKey() throws Exception { +// // Keep this test till version 1.2 +// AtomEntityProvider ser = createAtomEntityProvider(); +// Map<String, Object> localEmployeeData = new HashMap<String, Object>(employeeData); +// String mediaResourceMimeTypeKey = "~type"; +// localEmployeeData.put(mediaResourceMimeTypeKey, "wrong"); +// String originalMimeTypeKey = "~originalType"; +// localEmployeeData.put(originalMimeTypeKey, "right"); +// EdmEntitySet employeesSet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); +// EdmMapping mapping = employeesSet.getEntityType().getMapping(); +// when(mapping.getMediaResourceMimeTypeKey()).thenReturn(mediaResourceMimeTypeKey); +// when(mapping.getMimeType()).thenReturn(originalMimeTypeKey); +// ODataResponse response = ser.writeEntry(employeesSet, localEmployeeData, DEFAULT_PROPERTIES); +// String xmlString = verifyResponse(response); +// +// assertXpathExists("/a:entry/a:content[@type=\"right\"]", xmlString); +// assertXpathNotExists("/a:entry/a:content[@type=\"wrong\"]", xmlString); +// } private void verifyTagOrdering(final String xmlString, final String... toCheckTags) { XMLUnitHelper.verifyTagOrdering(xmlString, toCheckTags);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java index 6608558..37432dd 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducerTest.java @@ -84,7 +84,7 @@ public class AtomFeedProducerTest extends AbstractProviderTest { public void testFeedNamespaces() throws Exception { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("mediatype").build(); + EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); ODataResponse response = ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); String xmlString = verifyResponse(response); @@ -96,7 +96,7 @@ public class AtomFeedProducerTest extends AbstractProviderTest { public void testSelfLink() throws Exception { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("mediatype").build(); + EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); ODataResponse response = ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); String xmlString = verifyResponse(response); @@ -110,7 +110,7 @@ public class AtomFeedProducerTest extends AbstractProviderTest { String customLink = "Test"; AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("mediatype").selfLink( + EntityProviderWriteProperties.serviceRoot(BASE_URI).selfLink( new URI(customLink)).build(); ODataResponse response = ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); String xmlString = verifyResponse(response); @@ -124,7 +124,7 @@ public class AtomFeedProducerTest extends AbstractProviderTest { public void testFeedMandatoryParts() throws Exception { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("mediatype").build(); + EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); ODataResponse response = ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); String xmlString = verifyResponse(response); @@ -153,7 +153,6 @@ public class AtomFeedProducerTest extends AbstractProviderTest { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = EntityProviderWriteProperties.serviceRoot(BASE_URI) - .mediaResourceMimeType("mediatype") .inlineCount(Integer.valueOf(103)) .inlineCountType(InlineCount.ALLPAGES) .build(); @@ -170,7 +169,7 @@ public class AtomFeedProducerTest extends AbstractProviderTest { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("mediatype").build(); + EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); ODataResponse response = ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); String xmlString = verifyResponse(response); @@ -183,7 +182,6 @@ public class AtomFeedProducerTest extends AbstractProviderTest { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = EntityProviderWriteProperties.serviceRoot(BASE_URI) - .mediaResourceMimeType("mediatype") .nextLink("http://thisisanextlink") .build(); ODataResponse response = ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); @@ -197,7 +195,7 @@ public class AtomFeedProducerTest extends AbstractProviderTest { public void testInlineCountInvalid() throws Exception { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("mediatype").inlineCountType( + EntityProviderWriteProperties.serviceRoot(BASE_URI).inlineCountType( InlineCount.ALLPAGES).build(); ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); } @@ -208,7 +206,7 @@ public class AtomFeedProducerTest extends AbstractProviderTest { AtomEntityProvider ser = createAtomEntityProvider(); EntityProviderWriteProperties properties = - EntityProviderWriteProperties.serviceRoot(BASE_URI).mediaResourceMimeType("mediatype").build(); + EntityProviderWriteProperties.serviceRoot(BASE_URI).build(); ODataResponse response = ser.writeFeed(view.getTargetEntitySet(), roomsData, properties); String xmlString = verifyResponse(response); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java index 8efd99a..7052fb0 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java @@ -87,6 +87,163 @@ public class JsonEntryEntityProducerTest extends BaseTest { json); } + @SuppressWarnings("unchecked") + @Test + public void contentOnly() throws Exception { + HashMap<String, Object> employeeData = new HashMap<String, Object>(); + Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + date.clear(); + date.set(1999, 0, 1); + employeeData.put("EmployeeId", "1"); + employeeData.put("ImmageUrl", null); + employeeData.put("ManagerId", "1"); + employeeData.put("Age", new Integer(52)); + employeeData.put("RoomId", "1"); + employeeData.put("EntryDate", date); + employeeData.put("TeamId", "42"); + employeeData.put("EmployeeName", "Walter Winter"); + Map<String, Object> locationData = new HashMap<String, Object>(); + Map<String, Object> cityData = new HashMap<String, Object>(); + cityData.put("PostalCode", "33470"); + cityData.put("CityName", "Duckburg"); + locationData.put("City", cityData); + locationData.put("Country", "Calisota"); + employeeData.put("Location", locationData); + + final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); + EntityProviderWriteProperties properties = + EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).contentOnly(true) + .build(); + final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, employeeData, properties); + Map<String, Object> employee = + (Map<String, Object>) new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class); + assertNull(employee.get("__metadata")); + assertNull(employee.get("ne_Manager")); + assertNull(employee.get("ne_Team")); + assertNull(employee.get("ne_Room")); + } + + @SuppressWarnings("unchecked") + @Test + public void contentOnlyWithoutKey() throws Exception { + HashMap<String, Object> employeeData = new HashMap<String, Object>(); + employeeData.put("ManagerId", "1"); + employeeData.put("Age", new Integer(52)); + employeeData.put("RoomId", "1"); + employeeData.put("TeamId", "42"); + + List<String> selectedProperties = new ArrayList<String>(); + selectedProperties.add("ManagerId"); + selectedProperties.add("Age"); + selectedProperties.add("RoomId"); + selectedProperties.add("TeamId"); + final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); + + ExpandSelectTreeNode expandSelectTreeNode = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedProperties).build(); + EntityProviderWriteProperties properties = + EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).contentOnly(true) + .expandSelectTree(expandSelectTreeNode).build(); + final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, employeeData, properties); + Map<String, Object> employee = + (Map<String, Object>) new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class); + assertNull(employee.get("__metadata")); + assertNull(employee.get("ne_Manager")); + assertNull(employee.get("ne_Team")); + assertNull(employee.get("ne_Room")); + + assertEquals("1", employee.get("ManagerId")); + assertEquals("1", employee.get("RoomId")); + assertEquals("42", employee.get("TeamId")); + assertEquals(new Double(52), employee.get("Age")); + } + + @SuppressWarnings("unchecked") + @Test + public void contentOnlySelectedOrExpandedLinksMustBeIgnored() throws Exception { + final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); + + HashMap<String, Object> employeeData = new HashMap<String, Object>(); + employeeData.put("ManagerId", "1"); + + List<String> selectedProperties = new ArrayList<String>(); + selectedProperties.add("ManagerId"); + + List<String> expandedLinks = new ArrayList<String>(); + expandedLinks.add("ne_Manager"); + expandedLinks.add("ne_Team"); + expandedLinks.add("ne_Room"); + + ExpandSelectTreeNode expandSelectTreeNode = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedProperties).expandedLinks(expandedLinks) + .build(); + EntityProviderWriteProperties properties = + EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).contentOnly(true) + .expandSelectTree(expandSelectTreeNode).build(); + final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, employeeData, properties); + Map<String, Object> employee = + (Map<String, Object>) new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class); + assertNull(employee.get("__metadata")); + assertNull(employee.get("ne_Manager")); + assertNull(employee.get("ne_Team")); + assertNull(employee.get("ne_Room")); + + assertEquals("1", employee.get("ManagerId")); + } + + @SuppressWarnings("unchecked") + @Test + public void contentOnlyWithAdditinalLink() throws Exception { + final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); + HashMap<String, Object> employeeData = new HashMap<String, Object>(); + employeeData.put("ManagerId", "1"); + + List<String> selectedProperties = new ArrayList<String>(); + selectedProperties.add("ManagerId"); + + ExpandSelectTreeNode expandSelectTreeNode = + ExpandSelectTreeNode.entitySet(entitySet).selectedProperties(selectedProperties).build(); + + Map<String, Map<String, Object>> additinalLinks = new HashMap<String, Map<String, Object>>(); + Map<String, Object> managerLink = new HashMap<String, Object>(); + managerLink.put("EmployeeId", "1"); + additinalLinks.put("ne_Manager", managerLink); + + EntityProviderWriteProperties properties = + EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).contentOnly(true) + .expandSelectTree(expandSelectTreeNode).additionalLinks(additinalLinks).build(); + final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, employeeData, properties); + // System.out.println(StringHelper.inputStreamToString((InputStream) response.getEntity())); + Map<String, Object> employee = + (Map<String, Object>) new Gson().fromJson(new InputStreamReader((InputStream) response.getEntity()), Map.class); + assertNull(employee.get("__metadata")); + assertNull(employee.get("ne_Team")); + assertNull(employee.get("ne_Room")); + + assertEquals("1", employee.get("ManagerId")); + Map<String, Object> map = (Map<String, Object>) employee.get("ne_Manager"); + map = (Map<String, Object>) map.get("__deferred"); + assertEquals("http://host:80/service/Managers('1')", map.get("uri")); + } + + @Test + public void omitJsonWrapper() throws Exception { + final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Teams"); + Map<String, Object> teamData = new HashMap<String, Object>(); + teamData.put("Id", "1"); + teamData.put("isScrumTeam", true); + + EntityProviderWriteProperties properties = + EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).build(); + final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, teamData, properties); + final String json = verifyResponse(response); + assertEquals("{\"__metadata\":{\"id\":\"" + BASE_URI + "Teams('1')\"," + + "\"uri\":\"" + BASE_URI + "Teams('1')\",\"type\":\"RefScenario.Team\"}," + + "\"Id\":\"1\",\"Name\":null,\"isScrumTeam\":true," + + "\"nt_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Teams('1')/nt_Employees\"}}}", + json); + } + @Test(expected = EntityProviderException.class) public void entryWithNullData() throws Exception { final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Teams"); @@ -611,7 +768,6 @@ public class JsonEntryEntityProducerTest extends BaseTest { EdmMapping mapping = employeesSet.getEntityType().getMapping(); when(mapping.getMediaResourceSourceKey()).thenReturn(mediaResourceSourceKey); when(mapping.getMediaResourceMimeTypeKey()).thenReturn(mediaResourceMimeTypeKey); - when(mapping.getMimeType()).thenReturn(null); ODataResponse response = new JsonEntityProvider().writeEntry(employeesSet, employeeData, DEFAULT_PROPERTIES); String jsonString = verifyResponse(response); @@ -689,53 +845,53 @@ public class JsonEntryEntityProducerTest extends BaseTest { assertNull(jsonMap.get("edit_media")); } - @SuppressWarnings("unchecked") - @Test - public void assureGetMimeTypeWinsOverGetMediaResourceMimeTypeKey() throws Exception { - // Keep this test till version 1.2 - Map<String, Object> employeeData = new HashMap<String, Object>(); - - Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT")); - date.clear(); - date.set(1999, 0, 1); - - employeeData.put("EmployeeId", "1"); - employeeData.put("ImmageUrl", null); - employeeData.put("ManagerId", "1"); - employeeData.put("Age", new Integer(52)); - employeeData.put("RoomId", "1"); - employeeData.put("EntryDate", date); - employeeData.put("TeamId", "42"); - employeeData.put("EmployeeName", "Walter Winter"); - - Map<String, Object> locationData = new HashMap<String, Object>(); - Map<String, Object> cityData = new HashMap<String, Object>(); - cityData.put("PostalCode", "33470"); - cityData.put("CityName", "Duckburg"); - locationData.put("City", cityData); - locationData.put("Country", "Calisota"); - - employeeData.put("Location", locationData); - String mediaResourceMimeTypeKey = "~type"; - employeeData.put(mediaResourceMimeTypeKey, "wrong"); - String originalMimeTypeKey = "~originalType"; - employeeData.put(originalMimeTypeKey, "right"); - - EdmEntitySet employeesSet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); - EdmMapping mapping = employeesSet.getEntityType().getMapping(); - when(mapping.getMediaResourceMimeTypeKey()).thenReturn(mediaResourceMimeTypeKey); - when(mapping.getMimeType()).thenReturn(originalMimeTypeKey); - - ODataResponse response = new JsonEntityProvider().writeEntry(employeesSet, employeeData, DEFAULT_PROPERTIES); - String jsonString = verifyResponse(response); - - Gson gson = new Gson(); - StringMap<Object> jsonMap = gson.fromJson(jsonString, StringMap.class); - jsonMap = (StringMap<Object>) jsonMap.get("d"); - jsonMap = (StringMap<Object>) jsonMap.get("__metadata"); - - assertEquals("right", jsonMap.get("content_type")); - } +// @SuppressWarnings("unchecked") +// @Test +// public void assureGetMimeTypeWinsOverGetMediaResourceMimeTypeKey() throws Exception { +// // Keep this test till version 1.2 +// Map<String, Object> employeeData = new HashMap<String, Object>(); +// +// Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT")); +// date.clear(); +// date.set(1999, 0, 1); +// +// employeeData.put("EmployeeId", "1"); +// employeeData.put("ImmageUrl", null); +// employeeData.put("ManagerId", "1"); +// employeeData.put("Age", new Integer(52)); +// employeeData.put("RoomId", "1"); +// employeeData.put("EntryDate", date); +// employeeData.put("TeamId", "42"); +// employeeData.put("EmployeeName", "Walter Winter"); +// +// Map<String, Object> locationData = new HashMap<String, Object>(); +// Map<String, Object> cityData = new HashMap<String, Object>(); +// cityData.put("PostalCode", "33470"); +// cityData.put("CityName", "Duckburg"); +// locationData.put("City", cityData); +// locationData.put("Country", "Calisota"); +// +// employeeData.put("Location", locationData); +// String mediaResourceMimeTypeKey = "~type"; +// employeeData.put(mediaResourceMimeTypeKey, "wrong"); +// String originalMimeTypeKey = "~originalType"; +// employeeData.put(originalMimeTypeKey, "right"); +// +// EdmEntitySet employeesSet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees"); +// EdmMapping mapping = employeesSet.getEntityType().getMapping(); +// when(mapping.getMediaResourceMimeTypeKey()).thenReturn(mediaResourceMimeTypeKey); +// when(mapping.getMimeType()).thenReturn(originalMimeTypeKey); +// +// ODataResponse response = new JsonEntityProvider().writeEntry(employeesSet, employeeData, DEFAULT_PROPERTIES); +// String jsonString = verifyResponse(response); +// +// Gson gson = new Gson(); +// StringMap<Object> jsonMap = gson.fromJson(jsonString, StringMap.class); +// jsonMap = (StringMap<Object>) jsonMap.get("d"); +// jsonMap = (StringMap<Object>) jsonMap.get("__metadata"); +// +// assertEquals("right", jsonMap.get("content_type")); +// } @Test public void additionalLink() throws Exception { http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java index a2195ae..418dc8a 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java @@ -79,6 +79,39 @@ public class JsonFeedEntityProducerTest extends BaseTest { } @Test + public void omitJsonWrapperMustHaveNoEffect() throws Exception { + final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Teams"); + Map<String, Object> team1Data = new HashMap<String, Object>(); + team1Data.put("Id", "1"); + team1Data.put("isScrumTeam", true); + Map<String, Object> team2Data = new HashMap<String, Object>(); + team2Data.put("Id", "2"); + team2Data.put("isScrumTeam", false); + List<Map<String, Object>> teamsData = new ArrayList<Map<String, Object>>(); + teamsData.add(team1Data); + teamsData.add(team2Data); + + EntityProviderWriteProperties properties = + EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).build(); + final ODataResponse response = new JsonEntityProvider().writeFeed(entitySet, teamsData, properties); + assertNotNull(response); + assertNotNull(response.getEntity()); + assertNull("EntitypProvider must not set content header", response.getContentHeader()); + + final String json = StringHelper.inputStreamToString((InputStream) response.getEntity()); + assertNotNull(json); + assertEquals("{\"d\":{\"results\":[{\"__metadata\":{\"id\":\"" + BASE_URI + "Teams('1')\"," + + "\"uri\":\"" + BASE_URI + "Teams('1')\",\"type\":\"RefScenario.Team\"}," + + "\"Id\":\"1\",\"Name\":null,\"isScrumTeam\":true," + + "\"nt_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Teams('1')/nt_Employees\"}}}," + + "{\"__metadata\":{\"id\":\"" + BASE_URI + "Teams('2')\"," + + "\"uri\":\"" + BASE_URI + "Teams('2')\",\"type\":\"RefScenario.Team\"}," + + "\"Id\":\"2\",\"Name\":null,\"isScrumTeam\":false," + + "\"nt_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Teams('2')/nt_Employees\"}}}]}}", + json); + } + + @Test public void inlineCount() throws Exception { final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings"); final ODataResponse response = new JsonEntityProvider().writeFeed(entitySet, new ArrayList<Map<String, Object>>(), http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/rest/ODataExceptionMapperImplTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/rest/ODataExceptionMapperImplTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/rest/ODataExceptionMapperImplTest.java index 64e8cb2..74da93c 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/rest/ODataExceptionMapperImplTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/rest/ODataExceptionMapperImplTest.java @@ -36,7 +36,7 @@ import java.util.Map; import javax.servlet.ServletConfig; import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.NotAllowedException; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; @@ -370,7 +370,7 @@ public class ODataExceptionMapperImplTest extends BaseTest { // prepare String message = "The request dispatcher does not allow the HTTP method used for the request."; Exception exception = - new NotAllowedException(Response.status(Response.Status.METHOD_NOT_ALLOWED).header(HttpHeaders.ALLOW, "GET") + new ClientErrorException(Response.status(Response.Status.METHOD_NOT_ALLOWED).header(HttpHeaders.ALLOW, "GET") .build()); // execute http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/ODataServletTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/ODataServletTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/ODataServletTest.java new file mode 100644 index 0000000..1c74fc0 --- /dev/null +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/ODataServletTest.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * 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.core.servlet; + +import java.lang.reflect.Field; + +import javax.servlet.GenericServlet; +import javax.servlet.ServletConfig; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.olingo.odata2.api.ODataServiceFactory; +import org.apache.olingo.odata2.api.commons.HttpHeaders; +import org.apache.olingo.odata2.api.commons.HttpStatusCodes; +import org.apache.olingo.odata2.core.rest.ODataServiceFactoryImpl; +import org.junit.Test; +import org.mockito.Mockito; + +/** + * + */ +public class ODataServletTest { + + private HttpServletRequest reqMock; + private HttpServletResponse respMock; + private ServletConfig configMock; + + public ODataServletTest() { + reqMock = Mockito.mock(HttpServletRequest.class); + respMock = Mockito.mock(HttpServletResponse.class); + configMock = Mockito.mock(ServletConfig.class); + } + + @Test + public void handleRedirect() throws Exception { + ODataServlet servlet = new ODataServlet(); + prepareServlet(servlet); + prepareRequest(reqMock); + servlet.service(reqMock, respMock); + + Mockito.verify(respMock).setStatus(HttpStatusCodes.TEMPORARY_REDIRECT.getStatusCode()); + Mockito.verify(respMock).setHeader(HttpHeaders.LOCATION, "/context-path/servlet-path/"); + } + + @Test + public void handleRedirectWoServletPath() throws Exception { + ODataServlet servlet = new ODataServlet(); + prepareServlet(servlet); + prepareRequest(reqMock, "/context-path", null); + servlet.service(reqMock, respMock); + + Mockito.verify(respMock).setStatus(HttpStatusCodes.TEMPORARY_REDIRECT.getStatusCode()); + Mockito.verify(respMock).setHeader(HttpHeaders.LOCATION, "/context-path/"); + } + + @Test + public void handleRedirectWoContextPath() throws Exception { + ODataServlet servlet = new ODataServlet(); + prepareServlet(servlet); + prepareRequest(reqMock, null, "/servlet-path"); + servlet.service(reqMock, respMock); + + Mockito.verify(respMock).setStatus(HttpStatusCodes.TEMPORARY_REDIRECT.getStatusCode()); + Mockito.verify(respMock).setHeader(HttpHeaders.LOCATION, "/servlet-path/"); + } + + @Test + public void handleRedirectWoPath() throws Exception { + ODataServlet servlet = new ODataServlet(); + prepareServlet(servlet); + prepareRequest(reqMock, null, null); + servlet.service(reqMock, respMock); + + Mockito.verify(respMock).setStatus(HttpStatusCodes.TEMPORARY_REDIRECT.getStatusCode()); + Mockito.verify(respMock).setHeader(HttpHeaders.LOCATION, "/"); + } + + private void prepareRequest(final HttpServletRequest req, final String contextPath, final String servletPath) { + Mockito.when(req.getMethod()).thenReturn("GET"); + Mockito.when(req.getContextPath()).thenReturn(contextPath); + Mockito.when(req.getServletPath()).thenReturn(servletPath); + } + + private void prepareRequest(final HttpServletRequest req) { + prepareRequest(req, "/context-path", "/servlet-path"); + } + + private void prepareServlet(final GenericServlet servlet) throws Exception { + // private transient ServletConfig config; + Field configField = GenericServlet.class.getDeclaredField("config"); + configField.setAccessible(true); + configField.set(servlet, configMock); + + String factoryClassName = ODataServiceFactoryImpl.class.getName(); + Mockito.when(configMock.getInitParameter(ODataServiceFactory.FACTORY_LABEL)).thenReturn(factoryClassName); + } + +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/EmployeeContentOnly.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/EmployeeContentOnly.xml b/odata2-lib/odata-core/src/test/resources/EmployeeContentOnly.xml new file mode 100644 index 0000000..161b730 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/EmployeeContentOnly.xml @@ -0,0 +1,37 @@ +<!-- + 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. +--> +<entry xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://host:8080/ReferenceScenario.svc/"> + <m:properties> + <d:EmployeeId>1</d:EmployeeId> + <d:EmployeeName>Walter Winter</d:EmployeeName> + <d:ManagerId>1</d:ManagerId> + <d:RoomId>1</d:RoomId> + <d:TeamId>1</d:TeamId> + <d:Location m:type="RefScenario.c_Location"> + <d:City m:type="RefScenario.c_City"> + <d:PostalCode>69124</d:PostalCode> + <d:CityName>Heidelberg</d:CityName> + </d:City> + <d:Country>Germany</d:Country> + </d:Location> + <d:Age>52</d:Age> + <d:EntryDate>1999-01-01T00:00:00</d:EntryDate> + <d:ImageUrl>Employees('1')/$value</d:ImageUrl> + </m:properties> +</entry> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/EmployeeContentOnlyWithAdditionalLink.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/EmployeeContentOnlyWithAdditionalLink.xml b/odata2-lib/odata-core/src/test/resources/EmployeeContentOnlyWithAdditionalLink.xml new file mode 100644 index 0000000..dfa1b95 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/EmployeeContentOnlyWithAdditionalLink.xml @@ -0,0 +1,38 @@ +<!-- + 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. +--> +<entry xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://host:8080/ReferenceScenario.svc/"> + <link href="Managers('1')" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Manager" title="ne_Manager" type="application/atom+xml;type=entry"/> + <m:properties> + <d:EmployeeId>1</d:EmployeeId> + <d:EmployeeName>Walter Winter</d:EmployeeName> + <d:ManagerId>1</d:ManagerId> + <d:RoomId>1</d:RoomId> + <d:TeamId>1</d:TeamId> + <d:Location m:type="RefScenario.c_Location"> + <d:City m:type="RefScenario.c_City"> + <d:PostalCode>69124</d:PostalCode> + <d:CityName>Heidelberg</d:CityName> + </d:City> + <d:Country>Germany</d:Country> + </d:Location> + <d:Age>52</d:Age> + <d:EntryDate>1999-01-01T00:00:00</d:EntryDate> + <d:ImageUrl>Employees('1')/$value</d:ImageUrl> + </m:properties> +</entry> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnly.json ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnly.json b/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnly.json new file mode 100644 index 0000000..9352a29 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnly.json @@ -0,0 +1,25 @@ +{ + "d" : { + "EmployeeId" : "1", + "EmployeeName" : "Walter Winter", + "ManagerId" : "1", + "RoomId" : "1", + "TeamId" : "1", + "Location" : { + "__metadata" : { + "type" : "RefScenario.c_Location" + }, + "City" : { + "__metadata" : { + "type" : "RefScenario.c_City" + }, + "PostalCode" : "69124", + "CityName" : "Heidelberg" + }, + "Country" : "Germany" + }, + "Age" : 52, + "EntryDate" : "\/Date(915148800000)\/", + "ImageUrl" : "Employees('1')/$value" + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnlyWithAdditionalLink.json ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnlyWithAdditionalLink.json b/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnlyWithAdditionalLink.json new file mode 100644 index 0000000..fb90c14 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/JsonEmployeeContentOnlyWithAdditionalLink.json @@ -0,0 +1,30 @@ +{ + "d" : { + "EmployeeId" : "1", + "EmployeeName" : "Walter Winter", + "ManagerId" : "1", + "RoomId" : "1", + "TeamId" : "1", + "Location" : { + "__metadata" : { + "type" : "RefScenario.c_Location" + }, + "City" : { + "__metadata" : { + "type" : "RefScenario.c_City" + }, + "PostalCode" : "69124", + "CityName" : "Heidelberg" + }, + "Country" : "Germany" + }, + "Age" : 52, + "EntryDate" : "\/Date(915148800000)\/", + "ImageUrl" : "Employees('1')/$value", + "ne_Manager" : { + "__deferred" : { + "uri" : "http://host:8080/ReferenceScenario.svc/Managers('1')" + } + } + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/JsonRoom.json ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/JsonRoom.json b/odata2-lib/odata-core/src/test/resources/JsonRoom.json new file mode 100644 index 0000000..806aef2 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/JsonRoom.json @@ -0,0 +1,24 @@ +{ + "d" : { + "__metadata" : { + "id" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')", + "uri" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')", + "type" : "RefScenario.Room", + "etag" : "W/\"1\"" + }, + "Id" : "1", + "Name" : "Room 1", + "Seats" : 1, + "Version" : 1, + "nr_Employees" : { + "__deferred" : { + "uri" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')/nr_Employees" + } + }, + "nr_Building" : { + "__deferred" : { + "uri" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')/nr_Building" + } + } + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnly.json ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnly.json b/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnly.json new file mode 100644 index 0000000..f8c741a --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnly.json @@ -0,0 +1,8 @@ +{ + "d" : { + "Id" : "1", + "Name" : "Room 1", + "Seats" : 1, + "Version" : 1 + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnlyWithAdditionalLink.json ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnlyWithAdditionalLink.json b/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnlyWithAdditionalLink.json new file mode 100644 index 0000000..7a511b6 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/JsonRoomContentOnlyWithAdditionalLink.json @@ -0,0 +1,13 @@ +{ + "d" : { + "Id" : "1", + "Name" : "Room 1", + "Seats" : 1, + "Version" : 1, + "nr_Building" : { + "__deferred" : { + "uri" : "http://host:8080/ReferenceScenario.svc/Buildings('1')" + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/RoomContentOnly.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/RoomContentOnly.xml b/odata2-lib/odata-core/src/test/resources/RoomContentOnly.xml new file mode 100644 index 0000000..558e713 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/RoomContentOnly.xml @@ -0,0 +1,28 @@ +<!-- + 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. +--> +<entry xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://host:8080/ReferenceScenario.svc/" m:etag="W/"1""> + <content type="application/xml"> + <m:properties> + <d:Id>1</d:Id> + <d:Name>Room 1</d:Name> + <d:Seats>1</d:Seats> + <d:Version>1</d:Version> + </m:properties> + </content> +</entry> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/RoomContentOnlyWithAdditionalLink.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/RoomContentOnlyWithAdditionalLink.xml b/odata2-lib/odata-core/src/test/resources/RoomContentOnlyWithAdditionalLink.xml new file mode 100644 index 0000000..a7d039e --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/RoomContentOnlyWithAdditionalLink.xml @@ -0,0 +1,29 @@ +<!-- + 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. +--> +<entry xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://host:8080/ReferenceScenario.svc/" m:etag="W/"1""> + <link href="Buildings('1')" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building" title="nr_Building" type="application/atom+xml;type=entry"/> + <content type="application/xml"> + <m:properties> + <d:Id>1</d:Id> + <d:Name>Room 1</d:Name> + <d:Seats>1</d:Seats> + <d:Version>1</d:Version> + </m:properties> + </content> +</entry> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml b/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml new file mode 100644 index 0000000..b7b5057 --- /dev/null +++ b/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml @@ -0,0 +1,69 @@ +<?xml version='1.0' encoding='utf-8'?> +<!-- 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. --> +<feed xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://localhost:8080/ReferenceScenario.svc/"> + <id>http://localhost:8080/ReferenceScenario.svc/Rooms</id> + <title type="text">Rooms</title> + <updated>2014-05-08T13:06:23Z</updated> + <author> + <name/> + </author> + <link href="Rooms" rel="self" title="Rooms"/> + <entry m:etag="W/"1""> + <id>http://localhost:8080/ReferenceScenario.svc/Rooms('1')</id> + <title type="text">Room 1</title> + <updated>2014-05-08T13:06:23Z</updated> + <category term="RefScenario.Room" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> + <link href="Rooms('1')" rel="edit" title="Room"/> + <link href="Rooms('1')/nr_Employees" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Employees" title="nr_Employees" type="application/atom+xml;type=feed"/> + <link href="Rooms('1')/nr_Building" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building" title="nr_Building" type="application/atom+xml;type=entry"/> + <content type="application/xml"> + <m:properties> + <d:Id>1</d:Id> + <d:Name>Room 1</d:Name> + <d:Seats>1</d:Seats> + <d:Version>1</d:Version> + </m:properties> + </content> + </entry> + <entry m:etag="W/"1""> + <id>http://localhost:8080/ReferenceScenario.svc/Rooms('10')</id> + <title type="text">Room 10</title> + <updated>2014-05-08T13:06:23Z</updated> + <category term="RefScenario.Room" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> + <link href="Rooms('10')" rel="edit" title="Room"/> + <link href="Rooms('10')/nr_Employees" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Employees" title="nr_Employees" type="application/atom+xml;type=feed"/> + <link href="Rooms('10')/nr_Building" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building" title="nr_Building" type="application/atom+xml;type=entry"/> + <content type="application/xml"> + <m:properties> + <d:Id>10</d:Id> + <d:Name>Room 10</d:Name> + <d:Seats>6</d:Seats> + <d:Version>1</d:Version> + </m:properties> + </content> + </entry> + <entry m:etag="W/"1""> + <id>http://localhost:8080/ReferenceScenario.svc/Rooms('100')</id> + <title type="text">Room 100</title> + <updated>2014-05-08T13:06:23Z</updated> + <category term="RefScenario.Room" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/> + <link href="Rooms('100')" rel="edit" title="Room"/> + <link href="Rooms('100')/nr_Employees" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Employees" title="nr_Employees" type="application/atom+xml;type=feed"/> + <link href="Rooms('100')/nr_Building" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building" title="nr_Building" type="application/atom+xml;type=entry"/> + <content type="application/xml"> + <m:properties> + <d:Id>100</d:Id> + <d:Name>Room 100</d:Name> + <d:Seats>6</d:Seats> + <d:Version>1</d:Version> + </m:properties> + </content> + </entry> + <link href="http://localhost:8080/ReferenceScenario.svc/Rooms?$skiptoken=97" rel="next"/> +</feed> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-fit/pom.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-fit/pom.xml b/odata2-lib/odata-fit/pom.xml index 301d180..f4b9086 100644 --- a/odata2-lib/odata-fit/pom.xml +++ b/odata2-lib/odata-fit/pom.xml @@ -28,7 +28,7 @@ <parent> <groupId>org.apache.olingo</groupId> <artifactId>olingo-odata2-lib</artifactId> - <version>1.3.0-SNAPSHOT</version> + <version>2.0.0</version> <relativePath>..</relativePath> </parent> http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicHttpTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicHttpTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicHttpTest.java index b8d5939..408373c 100644 --- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicHttpTest.java +++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/BasicHttpTest.java @@ -207,7 +207,7 @@ public class BasicHttpTest extends AbstractBasicTest { public void unknownMethod() throws Exception { HttpSomethingUnsupported request = new HttpSomethingUnsupported(getEndpoint() + "aaa/bbb/ccc"); final HttpResponse response = getHttpClient().execute(request); - assertEquals(HttpStatusCodes.METHOD_NOT_ALLOWED.getStatusCode(), response.getStatusLine().getStatusCode()); + assertEquals(HttpStatusCodes.NOT_IMPLEMENTED.getStatusCode(), response.getStatusLine().getStatusCode()); } @Test @@ -269,6 +269,6 @@ public class BasicHttpTest extends AbstractBasicTest { @Test public void tunneledUnknownMethodOverride() throws Exception { - tunnelPost("X-HTTP-Method-Override", "xxx", HttpStatusCodes.METHOD_NOT_ALLOWED); + tunnelPost("X-HTTP-Method-Override", "xxx", HttpStatusCodes.NOT_IMPLEMENTED); } } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/UrlRewriteTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/UrlRewriteTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/UrlRewriteTest.java index 348e715..37d8ba7 100644 --- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/UrlRewriteTest.java +++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/UrlRewriteTest.java @@ -130,7 +130,7 @@ public class UrlRewriteTest extends AbstractBasicTest { public void testSomethingUnsupportedServiceDocumentRedirect() throws Exception { final HttpRequestBase httpMethod = createRedirectRequest(HttpSomethingUnsupported.class); final HttpResponse response = getHttpClient().execute(httpMethod); - assertEquals(HttpStatusCodes.METHOD_NOT_ALLOWED.getStatusCode(), response.getStatusLine().getStatusCode()); + assertEquals(HttpStatusCodes.NOT_IMPLEMENTED.getStatusCode(), response.getStatusLine().getStatusCode()); } private HttpRequestBase createRedirectRequest(final Class<? extends HttpRequestBase> clazz) throws Exception { http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-ref/pom.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-ref/pom.xml b/odata2-lib/odata-ref/pom.xml index 84a49d5..1280ef4 100644 --- a/odata2-lib/odata-ref/pom.xml +++ b/odata2-lib/odata-ref/pom.xml @@ -28,7 +28,7 @@ <parent> <groupId>org.apache.olingo</groupId> <artifactId>olingo-odata2-lib</artifactId> - <version>1.3.0-SNAPSHOT</version> + <version>2.0.0</version> <relativePath>..</relativePath> </parent> http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java index c57b06c..6585ccb 100644 --- a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java +++ b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java @@ -215,7 +215,10 @@ public class ScenarioEdmProvider extends EdmProvider { .setHasStream(true) .setKey(getKey("EmployeeId")) .setNavigationProperties(navigationProperties) - .setMapping(new Mapping().setMimeType("getImageType").setMediaResourceMimeTypeKey("~mrmtk")); + .setMapping(new Mapping() + // .setMimeType("getImageType") +// .setMediaResourceMimeTypeKey("~mrmtk") + .setMediaResourceMimeTypeKey("getImageType")); } else if (ENTITY_TYPE_1_BASE.getName().equals(edmFQName.getName())) { List<Property> properties = new ArrayList<Property>(); @@ -265,7 +268,9 @@ public class ScenarioEdmProvider extends EdmProvider { .setBaseType(ENTITY_TYPE_1_1) .setHasStream(true) .setNavigationProperties(navigationProperties) - .setMapping(new Mapping().setMimeType("getImageType")); + .setMapping(new Mapping() + // .setMimeType("getImageType") + .setMediaResourceMimeTypeKey("getImageType")); } else if (ENTITY_TYPE_1_5.getName().equals(edmFQName.getName())) { List<Property> properties = new ArrayList<Property>(); @@ -299,7 +304,7 @@ public class ScenarioEdmProvider extends EdmProvider { .setFcTargetPath(EdmTargetPath.SYNDICATION_AUTHORURI)) .setMapping(new Mapping().setInternalName("getImageUri"))); properties.add(new SimpleProperty().setName("Image").setType(EdmSimpleTypeKind.Binary) - .setMapping(new Mapping().setMimeType("getImageType"))); + .setMapping(new Mapping().setMediaResourceMimeTypeKey("getImageType"))); properties.add(new SimpleProperty().setName("BinaryData").setType(EdmSimpleTypeKind.Binary) .setFacets(new Facets().setNullable(true)) .setMimeType("image/jpeg")); @@ -315,7 +320,9 @@ public class ScenarioEdmProvider extends EdmProvider { .setProperties(properties) .setHasStream(true) .setKey(getKey("Id", "Type")) - .setMapping(new Mapping().setMimeType("getType").setMediaResourceMimeTypeKey("~MediaResourceMimeTypeKey")); + .setMapping(new Mapping() + // .setMimeType("getType") + .setMediaResourceMimeTypeKey("getType")); } } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/BeanPropertyAccess.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/BeanPropertyAccess.java b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/BeanPropertyAccess.java index 8898439..8ab3233 100644 --- a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/BeanPropertyAccess.java +++ b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/BeanPropertyAccess.java @@ -51,15 +51,15 @@ public class BeanPropertyAccess { } public <T> Object getMappingValue(final T data, final EdmMapping mapping) throws ODataException { - if (mapping != null && mapping.getMimeType() != null) { - return getValue(data, mapping.getMimeType()); + if (mapping != null && mapping.getMediaResourceMimeTypeKey() != null) { + return getValue(data, mapping.getMediaResourceMimeTypeKey()); } return null; } public <T, V> void setMappingValue(final T data, final EdmMapping mapping, final V value) throws ODataException { - if (mapping != null && mapping.getMimeType() != null) { - setValue(data, getSetterMethodName(mapping.getMimeType()), value); + if (mapping != null && mapping.getMediaResourceMimeTypeKey() != null) { + setValue(data, getSetterMethodName(mapping.getMediaResourceMimeTypeKey()), value); } } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java index 7e22a3d..86ae0cb 100644 --- a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java +++ b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java @@ -574,7 +574,7 @@ public class ListsProcessor extends ODataSingleProcessor { final List<EdmProperty> propertyPath = uriInfo.getPropertyPath(); final EdmProperty property = propertyPath.get(propertyPath.size() - 1); final Object value = property.isSimple() ? - property.getMapping() == null || property.getMapping().getMimeType() == null ? + property.getMapping() == null || property.getMapping().getMediaResourceMimeTypeKey() == null ? getPropertyValue(data, propertyPath) : getSimpleTypeValueMap(data, propertyPath) : getStructuralTypeValueMap(getPropertyValue(data, propertyPath), (EdmStructuralType) property.getType()); @@ -611,7 +611,7 @@ public class ListsProcessor extends ODataSingleProcessor { final List<EdmProperty> propertyPath = uriInfo.getPropertyPath(); final EdmProperty property = propertyPath.get(propertyPath.size() - 1); - final Object value = property.getMapping() == null || property.getMapping().getMimeType() == null ? + final Object value = property.getMapping() == null || property.getMapping().getMediaResourceMimeTypeKey() == null ? getPropertyValue(data, propertyPath) : getSimpleTypeValueMap(data, propertyPath); return ODataResponse.fromResponse(EntityProvider.writePropertyValue(property, value)).eTag( @@ -1513,13 +1513,10 @@ public class ListsProcessor extends ODataSingleProcessor { private void handleMimeType(final Object data, final EdmMapping mapping, final Map<String, Object> valueMap) throws ODataException { - final String mimeTypeName = mapping.getMimeType(); + final String mimeTypeName = mapping.getMediaResourceMimeTypeKey(); if (mimeTypeName != null) { Object value = valueAccess.getMappingValue(data, mapping); valueMap.put(mimeTypeName, value); - if (mapping.getMediaResourceMimeTypeKey() != null) { - valueMap.put(mapping.getMediaResourceMimeTypeKey(), value); - } } } @@ -1551,7 +1548,7 @@ public class ListsProcessor extends ODataSingleProcessor { final Object value = valueAccess.getPropertyValue(data, property); if (property.isSimple()) { - if (property.getMapping() == null || property.getMapping().getMimeType() == null) { + if (property.getMapping() == null || property.getMapping().getMediaResourceMimeTypeKey() == null) { valueMap.put(propertyName, value); } else { // TODO: enable MIME type mapping outside the current subtree http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-testutil/pom.xml ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-testutil/pom.xml b/odata2-lib/odata-testutil/pom.xml index 49738a1..292bfbb 100644 --- a/odata2-lib/odata-testutil/pom.xml +++ b/odata2-lib/odata-testutil/pom.xml @@ -20,7 +20,7 @@ <parent> <groupId>org.apache.olingo</groupId> <artifactId>olingo-odata2-lib</artifactId> - <version>1.3.0-SNAPSHOT</version> + <version>2.0.0</version> <relativePath>..</relativePath> </parent> http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java index ec8a22f..9059a8c 100644 --- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java +++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java @@ -18,7 +18,13 @@ ******************************************************************************/ package org.apache.olingo.odata2.testutil.helper; -import java.io.*; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.Random; @@ -30,15 +36,14 @@ import org.apache.olingo.odata2.testutil.TestUtilRuntimeException; */ public class StringHelper { - public static class Stream { private final byte[] data; - private Stream(byte[] data) { + private Stream(final byte[] data) { this.data = data; } - public Stream(String content, String charset) throws UnsupportedEncodingException { + public Stream(final String content, final String charset) throws UnsupportedEncodingException { this(content.getBytes(charset)); } @@ -54,11 +59,11 @@ public class StringHelper { return asString("UTF-8"); } - public String asString(String charsetName) { + public String asString(final String charsetName) { return new String(data, Charset.forName(charsetName)); } - public Stream print(OutputStream out) throws IOException { + public Stream print(final OutputStream out) throws IOException { out.write(data); return this; } @@ -71,7 +76,7 @@ public class StringHelper { * Number of lines separated by line breaks (<code>CRLF</code>). * A content string like <code>text\r\nmoreText</code> will result in * a line count of <code>2</code>. - * + * * @return lines count */ public int linesCount() { @@ -89,7 +94,7 @@ public class StringHelper { } } - public static Stream toStream(InputStream stream) throws IOException { + public static Stream toStream(final InputStream stream) throws IOException { byte[] result = new byte[0]; byte[] tmp = new byte[8192]; int readCount = stream.read(tmp); @@ -104,7 +109,7 @@ public class StringHelper { return new Stream(result); } - public static Stream toStream(String content) { + public static Stream toStream(final String content) { try { return new Stream(content, "UTF-8"); } catch (UnsupportedEncodingException e) { @@ -112,7 +117,6 @@ public class StringHelper { } } - public static String inputStreamToString(final InputStream in, final boolean preserveLineBreaks) throws IOException { final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8"))); final StringBuilder stringBuilder = new StringBuilder(); @@ -132,12 +136,12 @@ public class StringHelper { return result; } - public static int countLines(String content) { + public static int countLines(final String content) { return countLines(content, "\r\n"); } - public static int countLines(String content, String lineBreak) { - if(content == null) { + public static int countLines(final String content, final String lineBreak) { + if (content == null) { return -1; } @@ -145,7 +149,7 @@ public class StringHelper { int count = 1; while (lastPos >= 0) { - lastPos = content.indexOf(lineBreak, lastPos+1); + lastPos = content.indexOf(lineBreak, lastPos + 1); count++; } return count; http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/46d83c8e/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java index 66a5708..acf55a4 100644 --- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java +++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java @@ -72,7 +72,7 @@ class EdmMock { EdmEntityType employeeType = employeeEntitySet.getEntityType(); when(employeeType.hasStream()).thenReturn(true); EdmMapping employeeTypeMapping = Mockito.mock(EdmMapping.class); - when(employeeTypeMapping.getMimeType()).thenReturn("getImageType"); + when(employeeTypeMapping.getMediaResourceMimeTypeKey()).thenReturn("getImageType"); when(employeeType.getMapping()).thenReturn(employeeTypeMapping); when(employeeType.getPropertyNames()).thenReturn(Arrays.asList( "EmployeeId", "EmployeeName", "ManagerId", "RoomId", "TeamId", @@ -207,7 +207,7 @@ class EdmMock { when(photoEntityType.getKeyPropertyNames()).thenReturn(Arrays.asList("Id", "Type")); when(photoEntityType.hasStream()).thenReturn(true); EdmMapping photoEntityTypeMapping = Mockito.mock(EdmMapping.class); - when(photoEntityTypeMapping.getMimeType()).thenReturn("getType"); + when(photoEntityTypeMapping.getMediaResourceMimeTypeKey()).thenReturn("getType"); when(photoEntityType.getMapping()).thenReturn(photoEntityTypeMapping); EdmProperty photoIdProperty = createProperty("Id", EdmSimpleTypeKind.Int32, photoEntityType); EdmFacets photoIdFacet = mock(EdmFacets.class); @@ -220,7 +220,7 @@ class EdmMock { EdmProperty photoImageProperty = createProperty("Image", EdmSimpleTypeKind.Binary, photoEntityType); EdmMapping imageMapping = mock(EdmMapping.class); - when(imageMapping.getMimeType()).thenReturn("getImageType"); + when(imageMapping.getMediaResourceMimeTypeKey()).thenReturn("getImageType"); when(photoImageProperty.getMapping()).thenReturn(imageMapping); EdmProperty binaryDataProperty = createProperty("BinaryData", EdmSimpleTypeKind.Binary, photoEntityType);
