package org.mockserver.model; import org.junit.Test; import org.mockserver.client.serialization.Base64Converter; import java.util.Arrays; import java.util.concurrent.TimeUnit; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertNull; import static junit.framework.TestCase.assertTrue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.hasSize; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.mockito.Mockito.*; import static org.mockserver.model.HttpResponse.response; /** * @author jamesdbloom */ public class HttpResponseTest { @Test public void shouldAlwaysCreateNewObject() { assertEquals(new HttpResponse().response(), response()); assertNotSame(response(), response()); } @Test public void returnsResponseCode() { assertEquals(new Integer(200), new HttpResponse().withStatusCode(200).getStatusCode()); } @Test public void returnsBody() { assertEquals(Base64Converter.bytesToBase64String("somebody".getBytes()), new HttpResponse().withBody("somebody".getBytes()).getBodyAsString()); assertEquals("somebody", new HttpResponse().withBody("somebody").getBodyAsString()); assertNull(new HttpResponse().withBody((byte[]) null).getBodyAsString()); assertEquals(null, new HttpResponse().withBody((String) null).getBodyAsString()); } @Test public void returnsHeaders() { assertEquals(new Header("name", "value"), new HttpResponse().withHeaders(new Header("name", "value")).getHeaders().get(0)); assertEquals(new Header("name", "value"), new HttpResponse().withHeaders(Arrays.asList(new Header("name", "value"))).getHeaders().get(0)); assertEquals(new Header("name", "value"), new HttpRequest().withHeader(new Header("name", "value")).getHeaders().get(0)); assertEquals(new Header("name", "value_one", "value_two"), new HttpRequest().withHeader(new Header("name", "value_one")).withHeader(new Header("name", "value_two")).getHeaders().get(0)); } @Test public void returnsFirstHeaders() { assertEquals("value1", new HttpResponse().withHeaders(new Header("name", "value1")).getFirstHeader("name")); assertEquals("value1", new HttpResponse().withHeaders(new Header("name", "value1", "value2")).getFirstHeader("name")); assertEquals("value1", new HttpResponse().withHeaders(new Header("name", "value1", "value2"), new Header("name", "value3")).getFirstHeader("name")); } @Test public void returnsFirstHeaderIgnoringCase() { assertEquals("value1", new HttpResponse().withHeaders(new Header("NAME", "value1")).getFirstHeader("name")); assertEquals("value1", new HttpResponse().withHeaders(new Header("name", "value1", "value2")).getFirstHeader("NAME")); assertEquals("value1", new HttpResponse().withHeaders(new Header("NAME", "value1", "value2"), new Header("name", "value3")).getFirstHeader("name")); } @Test public void returnsHeaderByName() { assertThat(new HttpResponse().withHeaders(new Header("name", "value")).getHeader("name"), containsInAnyOrder("value")); assertThat(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).getHeader("name"), containsInAnyOrder("valueOne", "valueTwo")); assertThat(new HttpResponse().withHeader("name", "valueOne", "valueTwo").getHeader("name"), containsInAnyOrder("valueOne", "valueTwo")); assertThat(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).getHeader("otherName"), hasSize(0)); } @Test public void containsHeaderIgnoringCase() { assertTrue(new HttpResponse().withHeaders(new Header("name", "value")).containsHeader("name", "value")); assertTrue(new HttpResponse().withHeaders(new Header("name", "value")).containsHeader("name", "VALUE")); assertTrue(new HttpResponse().withHeaders(new Header("name", "value")).containsHeader("NAME", "value")); assertTrue(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).containsHeader("name", "valueOne")); assertTrue(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).containsHeader("name", "VALUEONE")); assertTrue(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).containsHeader("NAME", "valueTwo")); assertTrue(new HttpResponse().withHeader("name", "valueOne", "valueTwo").containsHeader("name", "ValueOne")); assertTrue(new HttpResponse().withHeader("name", "valueOne", "valueTwo").containsHeader("name", "valueOne")); assertTrue(new HttpResponse().withHeader("name", "valueOne", "valueTwo").containsHeader("NAME", "ValueOne")); assertFalse(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).containsHeader("otherName", "valueOne")); assertFalse(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).containsHeader("name", "value")); } @Test public void returnsHeaderByNameIgnoringCase() { assertThat(new HttpResponse().withHeaders(new Header("Name", "value")).getHeader("name"), containsInAnyOrder("value")); assertThat(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).getHeader("Name"), containsInAnyOrder("valueOne", "valueTwo")); assertThat(new HttpResponse().withHeader("NAME", "valueOne", "valueTwo").getHeader("name"), containsInAnyOrder("valueOne", "valueTwo")); assertThat(new HttpResponse().withHeaders(new Header("name", "valueOne", "valueTwo")).getHeader("otherName"), hasSize(0)); } @Test public void addDuplicateHeader() { assertThat(new HttpResponse().withHeader(new Header("name", "valueOne")).withHeader(new Header("name", "valueTwo")).getHeaders(), containsInAnyOrder(new Header("name", "valueOne", "valueTwo"))); assertThat(new HttpResponse().withHeader(new Header("name", "valueOne")).withHeader("name", "valueTwo").getHeaders(), containsInAnyOrder(new Header("name", "valueOne", "valueTwo"))); } @Test public void updatesExistingHeader() { assertThat(new HttpResponse().withHeader(new Header("name", "valueOne")).updateHeader(new Header("name", "valueTwo")).getHeaders(), containsInAnyOrder(new Header("name", "valueTwo"))); assertThat(new HttpResponse().withHeader(new Header("name", "valueOne")).updateHeader("name", "valueTwo").getHeaders(), containsInAnyOrder(new Header("name", "valueTwo"))); } @Test public void returnsCookies() { assertEquals(new Cookie("name", "value"), new HttpResponse().withCookies(new Cookie("name", "value")).getCookies().get(0)); assertEquals(new Cookie("name", ""), new HttpResponse().withCookies(new Cookie("name", "")).getCookies().get(0)); assertEquals(new Cookie("name", null), new HttpResponse().withCookies(new Cookie("name", null)).getCookies().get(0)); assertEquals(new Cookie("name", "value"), new HttpResponse().withCookies(Arrays.asList(new Cookie("name", "value"))).getCookies().get(0)); assertEquals(new Cookie("name", "value"), new HttpResponse().withCookie(new Cookie("name", "value")).getCookies().get(0)); assertEquals(new Cookie("name", "value"), new HttpResponse().withCookie("name", "value").getCookies().get(0)); assertEquals(new Cookie("name", ""), new HttpResponse().withCookie(new Cookie("name", "")).getCookies().get(0)); assertEquals(new Cookie("name", null), new HttpResponse().withCookie(new Cookie("name", null)).getCookies().get(0)); } @Test public void setsDelay() { assertEquals(new Delay(TimeUnit.MILLISECONDS, 10), new HttpResponse().withDelay(new Delay(TimeUnit.MILLISECONDS, 10)).getDelay()); assertEquals(new Delay(TimeUnit.MILLISECONDS, 10), new HttpResponse().withDelay(TimeUnit.MILLISECONDS, 10).getDelay()); } @Test public void setsConnectionOptions() { assertEquals( new ConnectionOptions() .withContentLengthHeaderOverride(10), new HttpResponse() .withConnectionOptions( new ConnectionOptions() .withContentLengthHeaderOverride(10) ) .getConnectionOptions() ); } @Test public void appliesDelay() throws InterruptedException { // given TimeUnit timeUnit = mock(TimeUnit.class); // when new HttpResponse().withDelay(new Delay(timeUnit, 10)).applyDelay(); // then verify(timeUnit).sleep(10); } @Test(expected = RuntimeException.class) public void applyDelayHandlesException() throws InterruptedException { // given TimeUnit timeUnit = mock(TimeUnit.class); doThrow(new InterruptedException("TEST EXCEPTION")).when(timeUnit).sleep(10); // when new HttpResponse().withDelay(new Delay(timeUnit, 10)).applyDelay(); } @Test public void shouldReturnFormattedRequestInToString() { assertEquals("{" + System.getProperty("line.separator") + " \"headers\" : [ {" + System.getProperty("line.separator") + " \"name\" : \"name\"," + System.getProperty("line.separator") + " \"values\" : [ \"value\" ]" + System.getProperty("line.separator") + " } ]," + System.getProperty("line.separator") + " \"cookies\" : [ {" + System.getProperty("line.separator") + " \"name\" : \"name\"," + System.getProperty("line.separator") + " \"value\" : \"[A-Z]{0,10}\"" + System.getProperty("line.separator") + " } ]," + System.getProperty("line.separator") + " \"body\" : \"some_body\"" + System.getProperty("line.separator") + "}", response() .withBody("some_body") .withHeaders(new Header("name", "value")) .withCookies(new Cookie("name", "[A-Z]{0,10}")) .toString() ); } }