From 0cc0ffd57f69f30f5950e339cdd570019369c192 Mon Sep 17 00:00:00 2001 From: Gabriel Saliev <48262816+gabbigum@users.noreply.github.com> Date: Fri, 12 Nov 2021 13:26:19 +0200 Subject: [PATCH] Fixes gh-1727 metadata duplication on stub mappings generation (#1728) * Fixes gh-1727 metadata duplication on stub mappings generation * Fix postProcessStubMapping to invoke defaultStubMappingPostProcessing once + reformat files * Fix checkstyle error Co-authored-by: Gabriel Saliev --- .../DslToWireMockClientConverter.java | 3 +- .../DslToWireMockClientConverterSpec.groovy | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.java b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.java index 185226a2a5..32ec854aed 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.java @@ -50,9 +50,8 @@ public class DslToWireMockClientConverter extends DslToWireMockConverter { @Override public StubMapping postProcessStubMapping(StubMapping stubMapping, Contract contract) { - StubMapping mapping = super.postProcessStubMapping(stubMapping, contract); // apply the default WireMock processor as the last one - return defaultStubMappingPostProcessing(mapping, contract); + return super.postProcessStubMapping(stubMapping, contract); } @Override diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy index c31d5af83e..2bf8b672d6 100755 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy @@ -1074,6 +1074,57 @@ class DslToWireMockClientConverterSpec extends Specification { response.statusCodeValue == 204 } + + @Issue("1727") + def "should create WireMock JSON() with no duplicate metadata fields"() { + given: + def converter = new DslToWireMockClientConverter() + and: + File file = tmpFolder.newFile("stub_mapping_duplicate.groovy") + file.write(""" + org.springframework.cloud.contract.spec.Contract.make { + request { + method 'POST' + url ('/ping') + } + response { + status 200 + } + + metadata([wiremock: [ + stubMapping: ''' { + "postServeActions" :{ + "webhook" : { + "url" : "/pong", + "method" : "PATCH" + } + } + }''']]) + } +""") + when: + String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(new File("/"), file))).values().first() + then: + JSONAssert.assertEquals(""" + { + "request" : { + "url" : "/ping", + "method" : "POST" + }, + "response" : { + "status" : 200 + }, + "postServeActions" : [ { + "name" : "webhook", + "parameters" : { + "url" : "/pong", + "method" : "PATCH" + } + } ] + }""", json, false) + } + StubMapping stubMappingIsValidWireMockStub(String mappingDefinition) { StubMapping stubMapping = WireMockStubMapping.buildFrom(mappingDefinition) stubMapping.request.bodyPatterns.findAll { it.isPresent() && it instanceof RegexPattern }.every {