/** * Copyright �� 2010-2011 Nokia * * 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.github.restdriver.clientdriver.exception; import static com.google.common.collect.Lists.*; import static java.util.Collections.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Enumeration; import java.util.List; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import org.hamcrest.Matchers; import org.junit.Test; import com.github.restdriver.clientdriver.ClientDriverExpectation; import com.github.restdriver.clientdriver.ClientDriverRequest; import com.github.restdriver.clientdriver.ClientDriverRequest.Method; import com.github.restdriver.clientdriver.ClientDriverRequestResponsePair; import com.github.restdriver.clientdriver.HttpRealRequest; import com.github.restdriver.clientdriver.unit.DummyServletInputStream; public class ClientDriverFailedExpectationExceptionTest { @Test public void should_include_failed_expectations_in_output() throws Exception { try { throw new ClientDriverFailedExpectationException(createExpectations()); } catch (ClientDriverFailedExpectationException e) { assertThat(e.getMessage(), containsString("PUT")); assertThat(e.getMessage(), containsString("/ok")); assertThat(e.getMessage(), containsString("/fail")); assertThat(e.getMessage(), containsString("containing \"p_test\"")); assertThat(e.getMessage(), containsString("ending with \"h_test\"")); assertThat(e.getMessage(), containsString("header-not-here")); assertThat(e.getMessage(), containsString("content_type")); assertThat(e.getMessage(), containsString("containing \"body\"")); } } @Test public void should_include_unexpected_requests_and_expectations_in_output() throws Exception { try { throw new ClientDriverFailedExpectationException(createUnexpectedRequests(), createExpectations()); } catch (ClientDriverFailedExpectationException e) { assertThat(e.getMessage(), containsString("/ok;")); assertThat(e.getMessage(), containsString("/fail;")); assertThat(e.getMessage(), containsString("p1=[test1]")); assertThat(e.getMessage(), containsString("header1: h_val1")); assertThat(e.getMessage(), containsString("TYPE app")); assertThat(e.getMessage(), containsString("TYPE app")); assertThat(e.getMessage(), containsString("/ok\";")); assertThat(e.getMessage(), containsString("/fail\";")); } } private List<ClientDriverExpectation> createExpectations() { return newArrayList( createExpectation("/ok"), createExpectation("/fail")); } private ClientDriverExpectation createExpectation(String path) { return new ClientDriverExpectation(createPair(path)); } private ClientDriverRequestResponsePair createPair(String path) { return new ClientDriverRequestResponsePair(createRequest(path), null); } private ClientDriverRequest createRequest(String path) { return new ClientDriverRequest(path) .withMethod(Method.PUT) .withHeader("header", Matchers.endsWith("h_test")) .withoutHeader("header-not-here") .withParam("param", containsString("p_test")) .withBody(containsString("body"), "content_type"); } private List<HttpRealRequest> createUnexpectedRequests() { return newArrayList( createUnexpectedRequest("/ok"), createUnexpectedRequest("/fail")); } private HttpRealRequest createUnexpectedRequest(String path) { HttpServletRequest mock = mock(HttpServletRequest.class); when(mock.getPathInfo()).thenReturn(path); when(mock.getMethod()).thenReturn("POST"); when(mock.getQueryString()).thenReturn("p1=test1&p2=test2"); when(mock.getHeaderNames()).thenReturn(createHeaderNames()); when(mock.getHeader(anyString())).thenReturn("h_val1", "h_val2"); when(mock.getContentType()).thenReturn("application/text"); try { when(mock.getInputStream()).thenReturn(createInputStream()); } catch (IOException e) { // Should never happen } return new HttpRealRequest(mock); } private Enumeration<String> createHeaderNames() { return enumeration(newArrayList("header1", "header2")); } private ServletInputStream createInputStream() { return new DummyServletInputStream(new ByteArrayInputStream("test".getBytes())); } }