/*
* Copyright (c) 2012 - 2016 Jadler contributors
* This program is made available under the terms of the MIT License.
*/
package net.jadler.stubbing;
import java.nio.charset.Charset;
import java.util.concurrent.TimeUnit;
import net.jadler.KeyValues;
import org.junit.Test;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.Matchers.notNullValue;
public class StubResponseTest {
private static final String STRING_WITH_DIACRITICS = "\u00e1\u0159\u017e";
private static final byte[] UTF_8_REPRESENTATION =
{(byte)0xC3, (byte)0xA1, (byte)0xC5, (byte)0x99, (byte)0xC5, (byte)0xBE};
private static final Charset UTF_8_CHARSET = Charset.forName("UTF-8");
private static final String HEADERS_TO_STRING = "headers_to_string";
private static final KeyValues DEFAULT_HEADERS = new KeyValues()
.add("header_1", "value_1_1").add("header_2", "value_2_1");
@Test(expected = IllegalArgumentException.class)
public void builderStatusWrongParam() {
StubResponse.builder().status(-1);
}
@Test
public void builderDefaultResponse() {
final StubResponse resp = StubResponse.builder().build();
assertThat(resp.getBody(), is(new byte[0]));
assertThat(resp.getDelay(), is(0L));
assertThat(resp.getEncoding(), is(nullValue()));
assertThat(resp.getHeaders(), is(notNullValue()));
assertThat(resp.getHeaders(), is(new KeyValues()));
assertThat(resp.getStatus(), is(200));
}
@Test
public void builderStatus() {
assertThat(StubResponse.builder().status(202).build().getStatus(), is(202));
}
@Test(expected = IllegalArgumentException.class)
public void builderBodyArrayWrongParam() {
StubResponse.builder().body(null);
}
@Test
public void builderBodyArray() {
final StubResponse resp = StubResponse.builder().body(UTF_8_REPRESENTATION).build();
assertThat(resp.getBody(), is(UTF_8_REPRESENTATION));
assertThat(resp.getEncoding(), is(nullValue()));
}
@Test(expected = IllegalArgumentException.class)
public void builderBodyStringWrongParam1() {
StubResponse.builder().body(null, Charset.defaultCharset());
}
@Test(expected = IllegalArgumentException.class)
public void builderBodyStringWrongParam2() {
StubResponse.builder().body("body", null);
}
@Test
public void builderBodyString() {
final StubResponse resp = StubResponse.builder().body(STRING_WITH_DIACRITICS, UTF_8_CHARSET).build();
assertThat(resp.getBody(), is(UTF_8_REPRESENTATION));
assertThat(resp.getEncoding(), is(UTF_8_CHARSET));
}
@Test(expected = IllegalArgumentException.class)
public void builderHeadersWrongParam() {
StubResponse.builder().headers(null);
}
@Test
public void builderHeaders() {
final KeyValues newHeaders = new KeyValues()
.add("header_3", "value_3_1")
.add("header_4", "value_4_1");
//default headers must be overwritten by the new ones
final StubResponse resp = StubResponse.builder().headers(DEFAULT_HEADERS).headers(newHeaders).build();
assertThat(resp.getHeaders(), is(newHeaders));
}
@Test(expected = IllegalArgumentException.class)
public void builderHeaderWrongParam1() {
StubResponse.builder().header(null, "value");
}
@Test(expected = IllegalArgumentException.class)
public void builderHeaderWrongParam2() {
StubResponse.builder().header("", "value");
}
@Test(expected = IllegalArgumentException.class)
public void builderHeaderWrongParam3() {
StubResponse.builder().header("header", null);
}
@Test
public void builderHeaderEmptyValue() {
StubResponse.builder().header("header", "");
}
@Test
public void builderHeader() {
final StubResponse resp = StubResponse.builder()
.headers(DEFAULT_HEADERS)
.header("header_2", "value_2_2") //adds 2nd value to header_2
.header("header_3", "value_3_1") //adds new header
.build();
final KeyValues expected = new KeyValues()
.add("header_1", "value_1_1")
.add("header_2", "value_2_1")
.add("header_2", "value_2_2")
.add("header_3", "value_3_1");
assertThat(resp.getHeaders(), is(expected));
}
@Test(expected = IllegalArgumentException.class)
public void builderDelayWrongParam1() {
StubResponse.builder().delay(-1, TimeUnit.DAYS);
}
@Test(expected = IllegalArgumentException.class)
public void builderDelayWrongParam2() {
StubResponse.builder().delay(100, null);
}
@Test
public void builderDelay() {
assertThat(StubResponse.builder().delay(5, TimeUnit.SECONDS).build().getDelay(), is(5000L));
}
@Test
public void testToStringBinaryBody() {
final StubResponse resp = StubResponse.builder().body(UTF_8_REPRESENTATION).build();
assertThat(resp.toString(), is("status=200, body=<binary>, headers=(), delay=0 milliseconds"));
}
@Test
public void testToStringStringBody() {
final StubResponse resp = StubResponse.builder().body(STRING_WITH_DIACRITICS, UTF_8_CHARSET).build();
assertThat(resp.toString(), is(String.format(
"status=200, body=%s, encoding=UTF-8, headers=(), delay=0 milliseconds", STRING_WITH_DIACRITICS)));
}
@Test
public void testToStringBinaryEmptyBody() {
final StubResponse resp = StubResponse.builder().body(new byte[0]).build();
assertThat(resp.toString(), is("status=200, body=<empty>, headers=(), delay=0 milliseconds"));
}
@Test
public void testToStringStringEmptyBody() {
final StubResponse resp = StubResponse.builder().body("", UTF_8_CHARSET).build();
assertThat(resp.toString(), is("status=200, body=<empty>, headers=(), delay=0 milliseconds"));
}
@Test
public void testToStringHeaders() {
final KeyValues headers = mock(KeyValues.class);
when(headers.toString()).thenReturn(HEADERS_TO_STRING);
final StubResponse resp = StubResponse.builder().headers(headers).build();
assertThat(resp.toString(),
is("status=200, body=<empty>, headers=(" + HEADERS_TO_STRING + "), delay=0 milliseconds"));
}
@Test
public void testToStringDelay() {
final StubResponse resp = StubResponse.builder().delay(4, TimeUnit.DAYS).build();
assertThat(resp.toString(), is("status=200, body=<empty>, headers=(), delay=4 days"));
}
}