diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/TestSideRequestTemplateModel.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/TestSideRequestTemplateModel.groovy index e6d8140dbe..fcc7b5c37a 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/TestSideRequestTemplateModel.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/TestSideRequestTemplateModel.groovy @@ -73,7 +73,9 @@ class TestSideRequestTemplateModel { private static List buildPathsFromUrl(String url) { String fakeUrl = "http://foo.bar" + (url.startsWith("/") ? url : "/" + url) List paths = new URL(fakeUrl).path.split("/") as List - paths.remove(0) + if (!paths.isEmpty()) { + paths.remove(0) + } return paths } @@ -84,7 +86,7 @@ class TestSideRequestTemplateModel { private static String getBodyAsRawJson(Object body) { Object bodyValue = extractServerValueFromBody(body) - return new JsonOutput().toJson(bodyValue) + return bodyValue != null ? new JsonOutput().toJson(bodyValue) : bodyValue } protected static Object extractServerValueFromBody(bodyValue) { diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy index c011db3852..4a3fd5acb6 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy @@ -348,6 +348,49 @@ DocumentContext parsedJson = JsonPath.parse(json); "JaxRsClientJUnitMethodBodyBuilder" | { Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } } + @Issue("#465") + def "should work for '/' url for [#methodBuilderName]"() { + given: + Contract contractDsl = Contract.make { + description(""" + Represents a request to the shouldReturnName service + + given: + a request to the shouldReturnName service + when: + it is a GET + then: + return Ryan + """) + request { + method 'GET' + url '/' + } + response { + status 200 + body("Ryan") + headers { + contentType(textHtml()) + } + } + } + MethodBodyBuilder builder = methodBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + String test = blockBuilder.toString() + then: + SyntaxChecker.tryToCompileWithoutCompileStatic(methodBuilderName, test) + and: + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) } + "MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } + "JaxRsClientSpockMethodRequestProcessingBodyBuilder" | { Contract dsl -> new JaxRsClientSpockMethodRequestProcessingBodyBuilder(dsl, properties) } + "JaxRsClientJUnitMethodBodyBuilder" | { Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } + } + def "should use fixed delay milliseconds in the generated test [#methodBuilderName]"() { given: Contract contractDsl = Contract.make {