/******************************************************************************* * Copyright 2013 SAP AG * * Licensed 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 com.sap.core.odata.fit.ref.contentnegotiation; import java.util.Arrays; import java.util.List; import org.junit.Ignore; import org.junit.Test; import com.sap.core.odata.api.commons.HttpStatusCodes; import com.sap.core.odata.core.uri.UriType; /** * @author SAP AG */ public class ContentNegotiationPostRequestTest extends AbstractContentNegotiationTest { public static final String EMPLOYEE_1_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<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://localhost:19000/\" m:etag=\"W/"1"\">" + "<id>http://localhost:19000/Employees('1')</id>" + "<title type=\"text\">Walter Winter</title>" + "<updated>1999-01-01T00:00:00Z</updated>" + "<category term=\"RefScenario.Employee\" scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\"/>" + "<link href=\"Employees('1')\" rel=\"edit\" title=\"Employee\"/>" + "<link href=\"Employees('1')/$value\" rel=\"edit-media\" type=\"application/octet-stream\" etag=\"mmEtag\"/>" + "<link href=\"Employees('1')/ne_Room\" rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Room\" type=\"application/atom+xml; type=entry\" title=\"ne_Room\"/>" + "<link href=\"Employees('1')/ne_Manager\" rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Manager\" type=\"application/atom+xml; type=entry\" title=\"ne_Manager\"/>" + "<link href=\"Employees('1')/ne_Team\" rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Team\" type=\"application/atom+xml; type=entry\" title=\"ne_Team\"/>" + "<content type=\"application/octet-stream\" src=\"Employees('1')/$value\"/>" + "<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:Country>Germany</d:Country>" + "<d:City m:type=\"RefScenario.c_City\">" + "<d:PostalCode>69124</d:PostalCode>" + "<d:CityName>Heidelberg</d:CityName>" + "</d:City>" + "</d:Location>" + "<d:Age>52</d:Age>" + "<d:EntryDate>1999-01-01T00:00:00</d:EntryDate>" + "<d:ImageUrl>/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg</d:ImageUrl>" + "</m:properties>" + "</entry>"; private static final String ROOM_1_XML = "<?xml version='1.0' encoding='UTF-8'?>" + "<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://localhost:19000/test/\" m:etag=\"W/"1"\">" + "<id>http://localhost:19000/test/Rooms('1')</id>" + "<title type=\"text\">Room 1</title>" + "<updated>2013-01-11T13:50:50.541+01:00</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\" type=\"application/atom+xml; type=feed\" title=\"nr_Employees\"/>" + "<link href=\"Rooms('1')/nr_Building\" rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building\" type=\"application/atom+xml; type=entry\" title=\"nr_Building\"/>" + "<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>"; @Test @Ignore("Currently ignored because of bad jenkins server performance") public void testURI_1_EntitySet_GET() throws Exception { // create test set FitTestSet testSet = FitTestSet.create(UriType.URI1, "/Employees", false, true, false).init(); // set specific response 'Content-Type's for '$format' testSet.setTestParam(Arrays.asList("application/xml", "application/xml; charset=utf-8"), HttpStatusCodes.OK, "application/xml; charset=utf-8"); testSet.setTestParam(Arrays.asList("", "application/atom+xml", "application/atom+xml; charset=utf-8"), HttpStatusCodes.OK, "application/atom+xml; type=feed; charset=utf-8"); // set all 'NOT ACCEPTED' requests final List<String> notAcceptedHeaderValues = Arrays.asList( "text/plain", "text/plain; charset=utf-8", "application/atomsvc+xml", "application/atomsvc+xml; charset=utf-8" ); testSet.setTestParam(notAcceptedHeaderValues, HttpStatusCodes.NOT_ACCEPTABLE, "application/xml"); // final List<String> notAcceptedJsonHeaderValues = Arrays.asList( "application/json", "application/json; charset=utf-8" ); // TODO: check which behavior is currently wanted testSet.setTestParam(notAcceptedJsonHeaderValues, HttpStatusCodes.NOT_ACCEPTABLE, "application/json"); // execute all defined tests testSet.execute(getEndpoint()); } @Test @Ignore("Currently ignored because of bad jenkins server performance") public void testURI_1_EntitySet() throws Exception { // create test set FitTestSet testSet = FitTestSet.create(UriType.URI1, "/Rooms") .httpMethod("POST") .queryOptions(Arrays.asList("")) .acceptHeader(Arrays.asList("", "application/xml")) .content(ROOM_1_XML) .requestContentTypes(CONTENT_TYPE_VALUES) // .requestContentTypes(Arrays.asList("application/xml; charset=utf-8", "application/xml")) .expectedStatusCode(HttpStatusCodes.CREATED) .init(); // testSet.setTestParam(Arrays.asList(""), HttpStatusCodes.CREATED, "application/atom+xml; type=entry; charset=utf-8"); // set all 'NOT ACCEPTED' requests final List<String> unsupportedRequestContentTypes = Arrays.asList( "text/plain", "text/plain; charset=utf-8", // "application/json", // "application/json; charset=utf-8", "application/atomsvc+xml", "application/atomsvc+xml; charset=utf-8" ); testSet.modifyRequestContentTypes(unsupportedRequestContentTypes, HttpStatusCodes.UNSUPPORTED_MEDIA_TYPE, "application/xml"); testSet.modifyRequestContentTypes(Arrays.asList("application/json", "application/json; charset=utf-8"), HttpStatusCodes.BAD_REQUEST, "application/xml"); // execute all defined tests testSet.execute(getEndpoint()); } @Test public void testURI_1_ForIssue() throws Exception { // create test set UriType uriType = UriType.URI1; String httpMethod = "POST"; String path = "/Employees"; String queryOption = ""; String acceptHeader = "*"; String content = "IMAGE_;o)"; String requestContentType = "image/jpeg"; HttpStatusCodes expectedStatusCode = HttpStatusCodes.CREATED; String expectedContentType = "application/atom+xml; charset=utf-8; type=entry"; FitTest test = FitTest.create(uriType, httpMethod, path, queryOption, acceptHeader, content, requestContentType, expectedStatusCode, expectedContentType); test.execute(getEndpoint()); } @Test @Ignore("What is expected service behavior?") public void testURI_2_ForIssue() throws Exception { // create test set UriType uriType = UriType.URI2; String httpMethod = "PUT"; String path = "/Employees('1')"; String queryOption = ""; String acceptHeader = "*"; String content = "IMAGE_;o)"; String requestContentType = "image/jpeg"; HttpStatusCodes expectedStatusCode = HttpStatusCodes.CREATED; String expectedContentType = "image/jpeg"; FitTest test = FitTest.create(uriType, httpMethod, path, queryOption, acceptHeader, content, requestContentType, expectedStatusCode, expectedContentType); test.execute(getEndpoint()); } @Test @Ignore("Some test failure") public void testURI_17_EntitySetWithMediaResource() throws Exception { // create test set FitTestSet testSet = FitTestSet.create(UriType.URI17, "/Employees('1')") .httpMethod("POST") .queryOptions(Arrays.asList("")) .acceptHeader(Arrays.asList("", "image/jpeg")) .content("Jon Doe") .requestContentTypes(Arrays.asList("image/jpeg")) .expectedStatusCode(HttpStatusCodes.CREATED) .init(); // set all 'NOT ACCEPTED' requests final List<String> unsupportedRequestContentTypes = Arrays.asList( "text/plain", "text/plain; charset=utf-8", "application/xml", "application/xml; charset=utf-8", "application/json", "application/json; charset=utf-8", "application/atomsvc+xml", "application/atomsvc+xml; charset=utf-8" ); testSet.modifyRequestContentTypes(unsupportedRequestContentTypes, HttpStatusCodes.UNSUPPORTED_MEDIA_TYPE, "application/xml"); // execute all defined tests testSet.execute(getEndpoint()); } @Test @Ignore("Some test failure") public void testURI_5_EntitySet() throws Exception { // create test set FitTestSet testSet = FitTestSet.create(UriType.URI1, "/Employees('1')/EmployeeName/$value") .httpMethod("PUT") .queryOptions(Arrays.asList("")) .acceptHeader(Arrays.asList("", "application/xml")) .content("Jon Doe") .requestContentTypes(Arrays.asList("text/plain; charset=utf-8", "text/plain")) .expectedStatusCode(HttpStatusCodes.CREATED) .init(); // set all 'NOT ACCEPTED' requests final List<String> unsupportedRequestContentTypes = Arrays.asList( "application/xml", "application/xml; charset=utf-8", "application/json", "application/json; charset=utf-8", "application/atomsvc+xml", "application/atomsvc+xml; charset=utf-8" ); testSet.modifyRequestContentTypes(unsupportedRequestContentTypes, HttpStatusCodes.UNSUPPORTED_MEDIA_TYPE, "application/xml"); // execute all defined tests testSet.execute(getEndpoint()); } }