diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java index d368b45497..2f291b505b 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java @@ -100,6 +100,19 @@ public class Response { return this.cookies; } + + /** + * @param response template of a response + * @return builder filled with response data + */ + public static Builder from(Response response) { + return new Builder() + .headers(response.headers) + .statusCode(response.statusCode) + .cookies(response.cookies) + .body(response.body); + } + /** * Response builder. */ @@ -150,6 +163,16 @@ public class Response { return this; } + /** + * @param key cookie key + * @param value cookie value + * @return builder + */ + public Response.Builder cookie(String key, Object value) { + this.cookies.put(key, value); + return this; + } + /** * @param cookies - response cookies * @return builder diff --git a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/ResponseTests.java b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/ResponseTests.java new file mode 100644 index 0000000000..db8ac764bd --- /dev/null +++ b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/ResponseTests.java @@ -0,0 +1,42 @@ +/* + * Copyright 2020-2020 the original author or authors. + * + * 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 + * + * https://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 org.springframework.cloud.contract.verifier.http; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.BDDAssertions.then; + +class ResponseTests { + + @Test + void should_override_entries_when_using_builder_from_response() { + Response response = Response.builder() + .statusCode(200) + .header("header", "header-value") + .cookie("cookie", "cookie-value") + .build(); + + Response changedResponse = Response.from(response) + .header("header-foo", "header-bar") + .cookie("cookie-foo", "cookie-bar") + .build(); + + then(changedResponse.statusCode()).isEqualTo(200); + then(changedResponse.headers()).containsEntry("header-foo", "header-bar").containsEntry("header", "header-value"); + then(changedResponse.cookies()).containsEntry("cookie-foo", "cookie-bar").containsEntry("cookie", "cookie-value"); + } +}