/*
* 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.Collection;
import java.util.Set;
import net.jadler.KeyValues;
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.map.MultiValueMap;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.*;
public class MutableStubResponseTest {
private static final int STATUS = 215;
private static final long DELAY = 1500;
private static final Charset CHARSET = Charset.forName("UTF-8");
private static final String STRING_BODY = "string_body";
private static final byte[] BYTES_BODY = "bytes_body".getBytes(CHARSET);
private static final MultiMap HEADERS_MAP;
static {
HEADERS_MAP = new MultiValueMap();
HEADERS_MAP.put("header1", "value1_1");
HEADERS_MAP.put("header2", "value2_1");
HEADERS_MAP.put("header3", "value3_1");
}
private static final KeyValues HEADERS = new KeyValues()
.add("header1", "value1_1")
.add("header2", "value2_1")
.add("header3", "value3_1");
private MutableStubResponse msr;
@Before
public void setUp() {
this.msr = new MutableStubResponse();
}
@Test
public void setBodyString() {
this.msr.setBody(BYTES_BODY);
this.msr.setBody(STRING_BODY); //this must reset the BYTES_BODY
assertThat(this.msr.getRawBody(), is(nullValue()));
assertThat(this.msr.getStringBody(), is(STRING_BODY));
}
@Test
public void setBodyBytes() {
this.msr.setBody(STRING_BODY);
this.msr.setBody(BYTES_BODY); //this must reset the STRING_BODY
assertThat(this.msr.getStringBody(), is(nullValue()));
assertThat(this.msr.getRawBody(), is(BYTES_BODY));
}
@Test
@SuppressWarnings("unchecked")
public void addHeader() {
this.msr.addHeaders(HEADERS_MAP);
this.msr.addHeader("header3", "value3_1");
assertThat(this.msr.getHeaders().size(), is(3));
assertThat((Set<String>)this.msr.getHeaders().keySet(), containsInAnyOrder("header1", "header2", "header3"));
}
@Test
@SuppressWarnings("unchecked")
public void addHeaderTwoValues() {
this.msr.addHeaders(HEADERS_MAP);
this.msr.addHeader("header2", "value2_2");
assertThat(this.msr.getHeaders().size(), is(3));
assertThat((Set<String>)this.msr.getHeaders().keySet(), containsInAnyOrder("header1", "header2", "header3"));
assertThat((Collection<String>)this.msr.getHeaders().get("header2"),
containsInAnyOrder("value2_1", "value2_2"));
}
@Test
@SuppressWarnings("unchecked")
public void addHeaders() {
this.msr.addHeaders(HEADERS_MAP);
final MultiMap additionalHeaders = new MultiValueMap();
additionalHeaders.put("header3", "value3_1");
this.msr.addHeaders(additionalHeaders);
assertThat(this.msr.getHeaders().size(), is(3));
assertThat((Set<String>)this.msr.getHeaders().keySet(), containsInAnyOrder("header1", "header2", "header3"));
}
@Test
@SuppressWarnings("unchecked")
public void addHeadersTwoValues() {
this.msr.addHeaders(HEADERS_MAP);
final MultiMap additionalHeaders = new MultiValueMap();
additionalHeaders.put("header2", "value2_2");
this.msr.addHeaders(additionalHeaders);
assertThat(this.msr.getHeaders().size(), is(3));
assertThat((Set<String>)this.msr.getHeaders().keySet(), containsInAnyOrder("header1", "header2", "header3"));
assertThat((Collection<String>)this.msr.getHeaders().get("header2"),
containsInAnyOrder("value2_1", "value2_2"));
}
@Test
@SuppressWarnings("unchecked")
public void setHeaderCaseInsensitive() {
this.msr.addHeaders(HEADERS_MAP);
this.msr.setHeaderCaseInsensitive("hEaDer2", "value2_2");
final MultiMap expected = new MultiValueMap();
expected.put("header1", "value1_1");
expected.put("hEaDer2", "value2_2");
expected.put("header3", "value3_1");
assertThat(this.msr.getHeaders(), is(expected));
}
@Test(expected=IllegalStateException.class)
public void toStubResponseBodyNotSet() {
this.msr.toStubResponse();
}
@Test(expected=IllegalStateException.class)
public void toStubResponseEncodingNotSet() {
this.msr.setBody(STRING_BODY);
this.msr.toStubResponse();
}
@Test
public void toStubResponse() {
this.msr.setStatus(STATUS);
this.msr.setDelay(DELAY);
this.msr.setEncoding(CHARSET);
this.msr.addHeaders(HEADERS_MAP);
this.msr.setBody(STRING_BODY);
final StubResponse resp = this.msr.toStubResponse();
assertThat(resp.getStatus(), is(STATUS));
assertThat(resp.getDelay(), is(DELAY));
assertThat(resp.getEncoding(), is(CHARSET));
assertThat(resp.getHeaders(), is(HEADERS));
assertThat(resp.getBody(), is(STRING_BODY.getBytes(CHARSET)));
}
@Test
public void toStubResponseByteBody() {
this.msr.setStatus(STATUS);
this.msr.setBody(BYTES_BODY);
final StubResponse resp = this.msr.toStubResponse();
assertThat(resp.getBody(), is(BYTES_BODY));
}
}