package org.mockserver.mappers; import com.google.common.collect.Lists; import org.junit.Test; import org.mockserver.model.*; import org.springframework.mock.web.MockHttpServletRequest; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Arrays; import java.util.Enumeration; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockserver.model.NottableString.string; /** * @author jamesdbloom */ @SuppressWarnings("unchecked") public class HttpServletRequestToMockServerRequestDecoderTest { @Test public void shouldMapHttpServletRequestToHttpRequest() { // given MockHttpServletRequest httpServletRequest = new MockHttpServletRequest("GET", "/requestURI"); httpServletRequest.setContextPath(null); httpServletRequest.setQueryString("queryStringParameterNameOne=queryStringParameterValueOne_One&queryStringParameterNameOne=queryStringParameterValueOne_Two&queryStringParameterNameTwo=queryStringParameterValueTwo_One"); httpServletRequest.addHeader("headerName1", "headerValue1_1"); httpServletRequest.addHeader("headerName1", "headerValue1_2"); httpServletRequest.addHeader("headerName2", "headerValue2"); httpServletRequest.setCookies(new javax.servlet.http.Cookie("cookieName1", "cookieValue1"), new javax.servlet.http.Cookie("cookieName2", "cookieValue2")); httpServletRequest.setContent("bodyParameterNameOne=bodyParameterValueOne_One&bodyParameterNameOne=bodyParameterValueOne_Two&bodyParameterNameTwo=bodyParameterValueTwo_One".getBytes()); // when HttpRequest httpRequest = new HttpServletRequestToMockServerRequestDecoder().mapHttpServletRequestToMockServerRequest(httpServletRequest); // then assertEquals(string("/requestURI"), httpRequest.getPath()); assertEquals(new ParameterBody( new Parameter("bodyParameterNameOne", "bodyParameterValueOne_One"), new Parameter("bodyParameterNameOne", "bodyParameterValueOne_Two"), new Parameter("bodyParameterNameTwo", "bodyParameterValueTwo_One") ).toString(), httpRequest.getBody().toString()); assertEquals(Arrays.asList( new Parameter("queryStringParameterNameOne", "queryStringParameterValueOne_One", "queryStringParameterValueOne_Two"), new Parameter("queryStringParameterNameTwo", "queryStringParameterValueTwo_One") ), httpRequest.getQueryStringParameters()); assertEquals(Lists.newArrayList(new Header("headerName1", "headerValue1_1", "headerValue1_2"), new Header("headerName2", "headerValue2")), httpRequest.getHeaders()); assertEquals(Lists.newArrayList(new Cookie("cookieName1", "cookieValue1"), new Cookie("cookieName2", "cookieValue2")), httpRequest.getCookies()); } @Test public void shouldMapPathForRequestsWithAContextPath() { // given MockHttpServletRequest httpServletRequest = new MockHttpServletRequest("GET", "/requestURI"); httpServletRequest.setContextPath("contextPath"); httpServletRequest.setPathInfo("/pathInfo"); httpServletRequest.setContent("".getBytes()); // when HttpRequest httpRequest = new HttpServletRequestToMockServerRequestDecoder().mapHttpServletRequestToMockServerRequest(httpServletRequest); // then assertEquals(string("/pathInfo"), httpRequest.getPath()); } @Test(expected = RuntimeException.class) public void shouldHandleExceptionWhenReadingBody() throws IOException { // given HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); when(httpServletRequest.getMethod()).thenReturn("GET"); when(httpServletRequest.getRequestURL()).thenReturn(new StringBuffer("requestURI")); when(httpServletRequest.getQueryString()).thenReturn("parameterName=parameterValue"); Enumeration<String> enumeration = mock(Enumeration.class); when(enumeration.hasMoreElements()).thenReturn(false); when(httpServletRequest.getHeaderNames()).thenReturn(enumeration); when(httpServletRequest.getInputStream()).thenThrow(new IOException("TEST EXCEPTION")); // when new HttpServletRequestToMockServerRequestDecoder().mapHttpServletRequestToMockServerRequest(httpServletRequest); } }