package by.stub.yaml;
import by.stub.builder.yaml.YamlBuilder;
import by.stub.utils.FileUtils;
import by.stub.utils.StringUtils;
import by.stub.yaml.stubs.StubHttpLifecycle;
import by.stub.yaml.stubs.StubRequest;
import by.stub.yaml.stubs.StubResponse;
import com.google.api.client.http.HttpMethods;
import org.fest.assertions.data.MapEntry;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.List;
import static by.stub.utils.FileUtils.BR;
import static org.fest.assertions.api.Assertions.assertThat;
/**
* @author Alexander Zagniotov
* @since 10/6/12, 8:13 PM
*/
public class YamlParserTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
private static final YamlBuilder YAML_BUILDER = new YamlBuilder();
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenEmptyYAMLGiven() throws Exception {
expectedException.expect(IOException.class);
expectedException.expectMessage("Loaded YAML root node must be an instance of ArrayList, otherwise something went wrong. Check provided YAML");
unmarshall("");
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithNoProperties() throws Exception {
final String yaml = YAML_BUILDER
.newStubbedRequest()
.withMethodPut()
.withUrl("/invoice")
.newStubbedResponse()
.build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
assertThat(actualHttpLifecycle.getAllResponses()).hasSize(1);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithNoSequenceResponses() throws Exception {
final String expectedStatus = "301";
final String yaml = YAML_BUILDER
.newStubbedRequest()
.withMethodPut()
.withUrl("/invoice")
.newStubbedResponse()
.withStatus(expectedStatus)
.build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse actualResponse = actualHttpLifecycle.getResponse(true);
assertThat(actualHttpLifecycle.getAllResponses()).hasSize(1);
assertThat(actualResponse.getStatus()).isEqualTo(expectedStatus);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithOneSequenceResponse() throws Exception {
final String sequenceResponseHeaderKey = "content-type";
final String sequenceResponseHeaderValue = "application/json";
final String sequenceResponseStatus = "200";
final String sequenceResponseBody = "OK";
final String yaml = YAML_BUILDER
.newStubbedRequest()
.withMethodPut()
.withUrl("/invoice")
.newStubbedResponse()
.withSequenceResponseStatus(sequenceResponseStatus)
.withSequenceResponseHeaders(sequenceResponseHeaderKey, sequenceResponseHeaderValue)
.withSequenceResponseLiteralBody(sequenceResponseBody)
.build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse actualResponse = actualHttpLifecycle.getResponse(true);
final MapEntry sequenceHeaderEntry = MapEntry.entry(sequenceResponseHeaderKey, sequenceResponseHeaderValue);
assertThat(actualResponse).isInstanceOf(StubResponse.class);
assertThat(actualResponse.getHeaders()).contains(sequenceHeaderEntry);
assertThat(actualResponse.getStatus()).isEqualTo(sequenceResponseStatus);
assertThat(actualResponse.getBody()).isEqualTo(sequenceResponseBody);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_AndReturnResponsesInSequence_WithManySequenceResponse() throws Exception {
final String sequenceResponseHeaderKey = "content-type";
final String sequenceResponseHeaderValue = "application/xml";
final String sequenceResponseStatus = "500";
final String sequenceResponseBody = "OMFG";
final String yaml = YAML_BUILDER
.newStubbedRequest()
.withMethodPut()
.withUrl("/invoice")
.newStubbedResponse()
.withSequenceResponseStatus("200")
.withSequenceResponseHeaders("content-type", "application/json")
.withSequenceResponseLiteralBody("OK")
.withLineBreak()
.withSequenceResponseStatus(sequenceResponseStatus)
.withSequenceResponseHeaders(sequenceResponseHeaderKey, sequenceResponseHeaderValue)
.withSequenceResponseFoldedBody(sequenceResponseBody)
.build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse irrelevantSequenceResponse = actualHttpLifecycle.getResponse(true);
final StubResponse actualSequenceResponse = actualHttpLifecycle.getResponse(true);
final MapEntry sequenceHeaderEntry = MapEntry.entry(sequenceResponseHeaderKey, sequenceResponseHeaderValue);
assertThat(actualSequenceResponse).isInstanceOf(StubResponse.class);
assertThat(actualSequenceResponse.getHeaders()).contains(sequenceHeaderEntry);
assertThat(actualSequenceResponse.getStatus()).isEqualTo(sequenceResponseStatus);
assertThat(actualSequenceResponse.getBody()).isEqualTo(sequenceResponseBody);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithUrlAsRegex() throws Exception {
final String url = "^/[a-z]{3}/[0-9]+/?$";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl(url)
.newStubbedResponse()
.withStatus("301").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
assertThat(actualRequest.getUrl()).isEqualTo(url);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithMultipleHTTPMethods() throws Exception {
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withMethodHead()
.newStubbedResponse()
.withStatus("301").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
assertThat(actualRequest.getMethod()).contains(HttpMethods.GET, HttpMethods.HEAD);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithDefaultHTTPResponseStatus() throws Exception {
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.newStubbedResponse()
.withLiteralBody("hello").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse actualResponse = actualHttpLifecycle.getResponse(true);
assertThat(actualResponse.getStatus()).isEqualTo(String.valueOf(200));
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithFoldedPost() throws Exception {
final String stubbedRequestPost = "{\"message\", \"Hello, this is a request post\"}";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withFoldedPost(stubbedRequestPost)
.newStubbedResponse()
.withStatus("201").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
assertThat(actualRequest.getPost()).isEqualTo(stubbedRequestPost);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithFileFailedToLoadAndPostSet() throws Exception {
final String stubbedRequestFile = "../../very.big.soap.request.xml";
final String expectedPost = "{\"message\", \"Hello, this is HTTP request post\"}";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withFile(stubbedRequestFile)
.withFoldedPost(expectedPost)
.newStubbedResponse()
.withLiteralBody("OK")
.withStatus("201").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
assertThat(actualRequest.getFile()).isEqualTo(new byte[]{});
assertThat(actualRequest.getPostBody()).isEqualTo(expectedPost);
}
@Test
public void shouldCaptureConsoleErrorOutput_WhenYAMLValid_WithFileFailedToLoadAndPostSet() throws Exception {
final String stubbedRequestFile = "../../very.big.soap.request.xml";
final String expectedPost = "{\"message\", \"Hello, this is HTTP request post\"}";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withFile(stubbedRequestFile)
.withFoldedPost(expectedPost)
.newStubbedResponse()
.withLiteralBody("OK")
.withStatus("201").build();
final ByteArrayOutputStream consoleCaptor = new ByteArrayOutputStream();
final boolean NO_AUTO_FLUSH = false;
System.setOut(new PrintStream(consoleCaptor, NO_AUTO_FLUSH, StringUtils.UTF_8));
unmarshall(yaml);
System.setOut(System.out);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains("Could not load file from path: ../../very.big.soap.request.xml");
assertThat(actualConsoleOutput).contains(YamlParser.FAILED_TO_LOAD_FILE_ERR);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithFileFailedToLoadAndBodySet() throws Exception {
final String stubbedResponseFile = "../../very.big.soap.response.xml";
final String expectedBody = "{\"message\", \"Hello, this is HTTP response body\"}";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.newStubbedResponse()
.withFoldedBody(expectedBody)
.withFile(stubbedResponseFile)
.withStatus("201").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse actualResponse = actualHttpLifecycle.getResponse(true);
assertThat(actualResponse.getFile()).isEqualTo(new byte[]{});
assertThat(StringUtils.newStringUtf8(actualResponse.getResponseBodyAsBytes())).isEqualTo(expectedBody);
}
@Test
public void shouldCaptureConsoleErrorOutput_WhenYAMLValid_WithFileFailedToLoadAndBodySet() throws Exception {
final String stubbedResponseFile = "../../very.big.soap.response.xml";
final String expectedBody = "{\"message\", \"Hello, this is HTTP response body\"}";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.newStubbedResponse()
.withFoldedBody(expectedBody)
.withFile(stubbedResponseFile)
.withStatus("201").build();
final ByteArrayOutputStream consoleCaptor = new ByteArrayOutputStream();
final boolean NO_AUTO_FLUSH = false;
System.setOut(new PrintStream(consoleCaptor, NO_AUTO_FLUSH, StringUtils.UTF_8));
unmarshall(yaml);
System.setOut(System.out);
final String actualConsoleOutput = consoleCaptor.toString(StringUtils.UTF_8).trim();
assertThat(actualConsoleOutput).contains("Could not load file from path: ../../very.big.soap.response.xml");
assertThat(actualConsoleOutput).contains(YamlParser.FAILED_TO_LOAD_FILE_ERR);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithLiteralPost() throws Exception {
final String stubbedRequestPost = "Hello, this is a request post";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withLiteralPost(stubbedRequestPost)
.newStubbedResponse()
.withStatus("201").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
assertThat(actualRequest.getPost()).isEqualTo(stubbedRequestPost);
}
@Test
public void shouldFailUnmarshallYamlIntoObjectTree_WithJsonAsLiteralPost() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Can not set java.lang.String field by.stub.yaml.StubRequestBuilder.post to java.util.LinkedHashMap");
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withLiteralPost("{\"message\", \"Hello, this is a request body\"}")
.newStubbedResponse()
.withStatus("201").build();
unmarshall(yaml);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithFoldedBody() throws Exception {
final String stubbedResponseBody = "{\"message\", \"Hello, this is a response body\"}";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.newStubbedResponse()
.withFoldedBody(stubbedResponseBody).build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse actualResponse = actualHttpLifecycle.getResponse(true);
assertThat(actualResponse.getBody()).isEqualTo(stubbedResponseBody);
}
@Test
public void shouldFailUnmarshallYamlIntoObjectTree_WithJsonAsLiteralBody() throws Exception {
expectedException.expect(IllegalArgumentException.class);
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.newStubbedResponse()
.withLiteralBody("{\"message\", \"Hello, this is a response body\"}").build();
unmarshall(yaml);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithLiteralBody() throws Exception {
final String stubbedResponseBody = "This is a sentence";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.newStubbedResponse()
.withLiteralBody(stubbedResponseBody).build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse actualResponse = actualHttpLifecycle.getResponse(true);
assertThat(actualResponse.getBody()).isEqualTo(stubbedResponseBody);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithMultipleQueryParams() throws Exception {
final String expectedParamOne = "paramOne";
final String expectedParamOneValue = "one";
final String fullQueryOne = String.format("%s=%s", expectedParamOne, expectedParamOneValue);
final String expectedParamTwo = "paramTwo";
final String expectedParamTwoValue = "two";
final String fullQueryTwo = String.format("%s=%s", expectedParamTwo, expectedParamTwoValue);
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withQuery(expectedParamOne, expectedParamOneValue)
.withQuery(expectedParamTwo, expectedParamTwoValue)
.newStubbedResponse()
.withStatus("500").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
final MapEntry queryEntryOne = MapEntry.entry(expectedParamOne, expectedParamOneValue);
final MapEntry queryEntryTwo = MapEntry.entry(expectedParamTwo, expectedParamTwoValue);
assertThat(actualRequest.getUrl()).contains(fullQueryOne);
assertThat(actualRequest.getUrl()).contains(fullQueryTwo);
assertThat(actualRequest.getQuery()).contains(queryEntryOne, queryEntryTwo);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithAuthorizationHeader() throws Exception {
final String authorization = "bob:secret";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withHeaderAuthorization(authorization)
.newStubbedResponse()
.withStatus("301").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
final String encodedAuthorizationHeader = String.format("%s %s", "Basic", StringUtils.encodeBase64(authorization));
final MapEntry headerOneEntry = MapEntry.entry("authorization", encodedAuthorizationHeader);
assertThat(actualRequest.getHeaders()).contains(headerOneEntry);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithEmptyAuthorizationHeader() throws Exception {
final String authorization = "";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withHeaderAuthorization("")
.newStubbedResponse()
.withStatus("301").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
final String encodedAuthorizationHeader = String.format("%s %s", "Basic", StringUtils.encodeBase64(authorization));
final MapEntry headerOneEntry = MapEntry.entry("authorization", encodedAuthorizationHeader);
assertThat(actualRequest.getHeaders()).contains(headerOneEntry);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WithMultipleHeaders() throws Exception {
final String location = "/invoice/123";
final String contentType = "application-json";
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.newStubbedResponse()
.withHeaderContentType(contentType)
.withHeaderLocation(location).build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubResponse actualResponse = actualHttpLifecycle.getResponse(true);
final MapEntry headerOneEntry = MapEntry.entry("location", location);
final MapEntry headerTwoEntry = MapEntry.entry("content-type", contentType);
assertThat(actualResponse.getHeaders()).contains(headerOneEntry);
assertThat(actualResponse.getHeaders()).contains(headerTwoEntry);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WitQueryParamIsArrayHavingDoubleQuotes() throws Exception {
final String expectedParamOne = "fruits";
final String expectedParamOneValue = "[\"apple\",\"orange\",\"banana\"]";
final String fullQueryOne = String.format("%s=%s", expectedParamOne, expectedParamOneValue);
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withQuery(expectedParamOne, String.format("'%s'", expectedParamOneValue))
.newStubbedResponse()
.withStatus("201").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
final MapEntry queryEntryOne = MapEntry.entry(expectedParamOne, expectedParamOneValue);
assertThat(actualRequest.getUrl()).contains(fullQueryOne);
assertThat(actualRequest.getQuery()).contains(queryEntryOne);
}
@Test
public void shouldUnmarshallYamlIntoObjectTree_WhenYAMLValid_WitQueryParamIsArrayHavingSingleQuotes() throws Exception {
final String expectedParamOne = "fruits";
final String expectedParamOneValue = "['apple','orange','banana']";
final String fullQueryOne = String.format("%s=%s", expectedParamOne, expectedParamOneValue);
final String yaml = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri")
.withQuery(expectedParamOne, String.format("\"%s\"", expectedParamOneValue))
.newStubbedResponse()
.withStatus("201").build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
final StubHttpLifecycle actualHttpLifecycle = loadedHttpCycles.get(0);
final StubRequest actualRequest = actualHttpLifecycle.getRequest();
final MapEntry queryEntryOne = MapEntry.entry(expectedParamOne, expectedParamOneValue);
assertThat(actualRequest.getUrl()).contains(fullQueryOne);
assertThat(actualRequest.getQuery()).contains(queryEntryOne);
}
@Test
public void shouldContainExpectedResourceIdHeaderUponSuccessfulYamlMarshall_WhenMultipleResponses() throws Exception {
final String cycleOne = YAML_BUILDER
.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri/1")
.withQuery("paramName1", "paramValue1")
.newStubbedResponse()
.withStatus("200")
.build();
final String cycleTwo = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri/2")
.withQuery("paramName2", "paramValue2")
.newStubbedResponse()
.withStatus("201")
.build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(String.format("%s\n%s", cycleOne, cycleTwo));
assertThat(loadedHttpCycles.size()).isEqualTo(2);
for (int idx = 0; idx < loadedHttpCycles.size(); idx++) {
final StubHttpLifecycle cycle = loadedHttpCycles.get(idx);
final StubResponse cycleResponse = cycle.getResponse(true);
assertThat(cycleResponse.getHeaders()).containsKey(StubResponse.STUBBY_RESOURCE_ID_HEADER);
assertThat(cycleResponse.getHeaders().get(StubResponse.STUBBY_RESOURCE_ID_HEADER)).isEqualTo(String.valueOf(idx));
}
}
@Test
public void shouldContainTheSameResourceIdHeader_ForEachSequencedResponse() throws Exception {
final String yaml = YAML_BUILDER
.newStubbedRequest()
.withMethodPut()
.withUrl("/invoice")
.newStubbedResponse()
.withSequenceResponseStatus("200")
.withSequenceResponseHeaders("headerOne", "valueOne")
.withSequenceResponseLiteralBody("BodyContent")
.withSequenceResponseStatus("200")
.withSequenceResponseHeaders("headerTwo", "valueTwo")
.withSequenceResponseLiteralBody("BodyContentTwo")
.build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(yaml);
assertThat(loadedHttpCycles.size()).isEqualTo(1);
final StubHttpLifecycle cycle = loadedHttpCycles.get(0);
final List<StubResponse> allResponses = cycle.getAllResponses();
for (int idx = 0; idx < allResponses.size(); idx++) {
final StubResponse sequenceStubResponse = allResponses.get(idx);
assertThat(sequenceStubResponse.getHeaders()).containsKey(StubResponse.STUBBY_RESOURCE_ID_HEADER);
assertThat(sequenceStubResponse.getHeaders().get(StubResponse.STUBBY_RESOURCE_ID_HEADER)).isEqualTo(String.valueOf(0));
}
}
@Test
public void shouldContainExpectedResourceIdHeaderUponSuccessfulYamlMarshall_WhenMultipleAndSqequencedResponses() throws Exception {
final String cycleOne = YAML_BUILDER
.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri/1")
.withQuery("paramName1", "paramValue1")
.newStubbedResponse()
.withStatus("200")
.build();
final String cycleTwo = YAML_BUILDER
.newStubbedRequest()
.withMethodPut()
.withUrl("/invoice")
.newStubbedResponse()
.withSequenceResponseStatus("200")
.withSequenceResponseHeaders("headerOne", "valueOne")
.withSequenceResponseLiteralBody("BodyContent")
.withSequenceResponseStatus("200")
.withSequenceResponseHeaders("headerTwo", "valueTwo")
.withSequenceResponseLiteralBody("BodyContentTwo")
.build();
final String cycleThree = YAML_BUILDER.newStubbedRequest()
.withMethodGet()
.withUrl("/some/uri/2")
.withQuery("paramName2", "paramValue2")
.newStubbedResponse()
.withStatus("201")
.build();
final List<StubHttpLifecycle> loadedHttpCycles = unmarshall(String.format("%s%s%s%s%s", cycleOne, BR, cycleTwo, BR, cycleThree));
assertThat(loadedHttpCycles.size()).isEqualTo(3);
for (int resourceId = 0; resourceId < loadedHttpCycles.size(); resourceId++) {
final StubHttpLifecycle cycle = loadedHttpCycles.get(resourceId);
final List<StubResponse> allResponses = cycle.getAllResponses();
for (int sequence = 0; sequence < allResponses.size(); sequence++) {
final StubResponse sequenceStubResponse = allResponses.get(sequence);
assertThat(sequenceStubResponse.getHeaders()).containsKey(StubResponse.STUBBY_RESOURCE_ID_HEADER);
assertThat(sequenceStubResponse.getHeaders().get(StubResponse.STUBBY_RESOURCE_ID_HEADER)).isEqualTo(String.valueOf(resourceId));
}
}
}
private List<StubHttpLifecycle> unmarshall(final String yaml) throws Exception {
return new YamlParser().parse(".", FileUtils.constructReader(yaml));
}
}