/**
* 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.unit;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.github.restdriver.clientdriver.ClientDriverResponse;
import com.github.restdriver.clientdriver.exception.ClientDriverResponseCreationException;
public class ClientDriverResponseTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void creatingResponseWithoutContentGives204Status() {
ClientDriverResponse response = new ClientDriverResponse();
assertThat(response.getStatus(), is(204));
}
@Test
public void creatingResponseWithStringContentGives200Status() {
ClientDriverResponse response = new ClientDriverResponse("content", "text/plain");
assertThat(response.getStatus(), is(200));
}
@Test
public void creatingResponseWithInputStreamContentGives200Status() {
ClientDriverResponse response = new ClientDriverResponse(IOUtils.toInputStream("content"), "application/octet-stream");
assertThat(response.getStatus(), is(200));
}
@Test
public void creatingResponseWithEmptyStringContentGives200Status() {
ClientDriverResponse response = new ClientDriverResponse("", "text/plain");
assertThat(response.getStatus(), is(200));
}
@Test
public void creatingResponseWithEmptyInputStreamGives200Status() {
ClientDriverResponse response = new ClientDriverResponse(IOUtils.toInputStream(""), "application/octet-stream");
assertThat(response.getStatus(), is(200));
}
@Test
public void creatingResponseWithNullStringGives204Status() {
ClientDriverResponse response = new ClientDriverResponse((String) null, "text/plain");
assertThat(response.getStatus(), is(204));
}
@Test
public void creatingResponseWithNullInputStreamGives204Status() {
ClientDriverResponse response = new ClientDriverResponse((InputStream) null, "application/octet-stream");
assertThat(response.getStatus(), is(204));
}
@SuppressWarnings("deprecation")
@Test
public void creatingResponseWithStringContentHasTextContentType() {
ClientDriverResponse response = new ClientDriverResponse("content");
assertThat(response.getContentType(), is("text/plain"));
}
@SuppressWarnings("deprecation")
@Test
public void creatingEmptyResponseGivesNoContentType() {
assertThat(new ClientDriverResponse().getContentType(), is(nullValue()));
assertThat(new ClientDriverResponse((String) null).getContentType(), is(nullValue()));
assertThat(new ClientDriverResponse("").getContentType(), is(nullValue()));
assertThat(new ClientDriverResponse((InputStream) null, null).getContentType(), is(nullValue()));
assertThat(new ClientDriverResponse(IOUtils.toInputStream(""), null).getContentType(), is(nullValue()));
}
@Test
public void creatingResponseWithStringContentHasBody() {
ClientDriverResponse response = new ClientDriverResponse("content", "text/plain");
assertThat(response.hasBody(), is(true));
}
@Test
public void creatingResponseWithInputStreamContentHasBody() {
ClientDriverResponse response = new ClientDriverResponse(IOUtils.toInputStream("content"), "application/octet-stream");
assertThat(response.hasBody(), is(true));
}
@Test
public void creatingEmptyResponseHasNoBody() {
assertThat(new ClientDriverResponse().hasBody(), is(false));
assertThat(new ClientDriverResponse((String) null, null).hasBody(), is(false));
assertThat(new ClientDriverResponse("", null).hasBody(), is(false));
assertThat(new ClientDriverResponse((InputStream) null, null).hasBody(), is(false));
assertThat(new ClientDriverResponse(IOUtils.toInputStream(""), null).hasBody(), is(false));
}
@Test
public void creatingResponseWithStringReturnsCorrectValueWhenFetchingContentAsString() {
ClientDriverResponse response = new ClientDriverResponse("some text", "text/plain");
assertThat(response.getContent(), is("some text"));
}
@Test
public void creatingResponseWithInputStreamReturnsCorrectValueWhenFetchingContentAsString() {
ClientDriverResponse response = new ClientDriverResponse(IOUtils.toInputStream("some text"), "application/octet-stream");
assertThat(response.getContent(), is("some text"));
}
@Test
public void creatingEmptyResponseHasEmptyStringContentWhenFetchingContentAsString() {
assertThat(new ClientDriverResponse().getContent(), is(""));
assertThat(new ClientDriverResponse((String) null, null).getContent(), is(""));
assertThat(new ClientDriverResponse("", null).getContent(), is(""));
assertThat(new ClientDriverResponse((InputStream) null, null).getContent(), is(""));
assertThat(new ClientDriverResponse(IOUtils.toInputStream(""), null).getContent(), is(""));
}
@Test
public void creatingRepsonseWithStringReturnsCorrectByteArrayWhenFetchingContent() {
ClientDriverResponse response = new ClientDriverResponse("some text", "text/plain");
assertThat(response.getContentAsBytes(), is(("some text").getBytes()));
}
@Test
public void creatingResponseWithInputStreamReturnsCorrectByteArrayWhenFetchingContent() {
ClientDriverResponse response = new ClientDriverResponse(IOUtils.toInputStream("some text"), "application/octet-stream");
assertThat(response.getContentAsBytes(), is(("some text").getBytes()));
}
@Test
public void creatingEmptyResponseHasNullByteArrayWhenFetchingContent() {
assertThat(new ClientDriverResponse().getContentAsBytes(), is(nullValue()));
assertThat(new ClientDriverResponse((String) null, null).getContentAsBytes(), is(nullValue()));
assertThat(new ClientDriverResponse("", null).getContentAsBytes(), is(nullValue()));
assertThat(new ClientDriverResponse((InputStream) null, null).getContentAsBytes(), is(nullValue()));
assertThat(new ClientDriverResponse(IOUtils.toInputStream(""), null).getContentAsBytes(), is(nullValue()));
}
@Test
public void creatingResponseWithTroublesomeInputStreamThrowsClientResponseCreationException() throws IOException {
thrown.expect(ClientDriverResponseCreationException.class);
thrown.expectMessage("unable to create client driver response");
InputStream mockInputStream = mock(InputStream.class);
when(mockInputStream.read((byte[]) anyObject())).thenThrow(new IOException("exception reading stream"));
new ClientDriverResponse(mockInputStream, "application/octet-stream");
}
@SuppressWarnings("deprecation")
@Test
public void usingHeaderCanOverrideContentType() {
ClientDriverResponse response = new ClientDriverResponse("hello").withContentType("text/plain");
assertThat(response.getContentType(), is("text/plain"));
response.withHeader("Content-Type", "text/xml");
assertThat(response.getContentType(), is("text/xml"));
}
@SuppressWarnings("deprecation")
@Test
public void usingHeaderCanOverrideContentTypeIgnoringCase() {
ClientDriverResponse response = new ClientDriverResponse("hello").withContentType("text/plain");
assertThat(response.getContentType(), is("text/plain"));
response.withHeader("content-type", "text/xml");
assertThat(response.getContentType(), is("text/xml"));
}
@Test
public void usingStatusCodeOverridesDefaultStatusCode() {
ClientDriverResponse response = new ClientDriverResponse().withStatus(201);
assertThat(response.getStatus(), is(201));
}
@Test
public void customHeadersCanBeSet() {
ClientDriverResponse response = new ClientDriverResponse();
response.withHeader("Server", "server-name");
assertThat(response.getHeaders(), hasEntry("Server", "server-name"));
}
}