From ff22880d1ef617f4fe84a441cfa72eedc1c1bb48 Mon Sep 17 00:00:00 2001 From: Tim Ysewyn Date: Sat, 10 Aug 2019 15:09:49 +0200 Subject: [PATCH] More type safe --- .../cloud/contract/spec/ContractDsl.kt | 16 +++++++-------- .../contract/spec/ContractDslExtensions.kt | 4 +--- .../cloud/contract/spec/internal/InputDsl.kt | 18 ++++++----------- .../spec/internal/OutputMessageDsl.kt | 10 ++++------ .../contract/spec/internal/RequestDsl.kt | 20 +++++++++---------- .../contract/spec/internal/ResponseDsl.kt | 2 -- .../cloud/contract/spec/ContractTests.kt | 8 ++++---- 7 files changed, 32 insertions(+), 46 deletions(-) diff --git a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDsl.kt b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDsl.kt index 555bc8d4b1..2410010d57 100644 --- a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDsl.kt +++ b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDsl.kt @@ -65,16 +65,16 @@ class ContractDsl { private fun get(): Contract { val contract = Contract() - priority?.also { contract.priority = priority!! } - label?.also { contract.label = label!! } - description?.also { contract.description = description!! } - name?.also { contract.name = name!! } + priority?.also { contract.priority = priority } + label?.also { contract.label = label } + description?.also { contract.description = description } + name?.also { contract.name = name } contract.ignored = ignored contract.inProgress = inProgress - request?.also { contract.request = request!! } - response?.also { contract.response = response!! } - input?.also { contract.input = input!! } - outputMessage?.also { contract.outputMessage = outputMessage!! } + request?.also { contract.request = request } + response?.also { contract.response = response } + input?.also { contract.input = input } + outputMessage?.also { contract.outputMessage = outputMessage } return contract } diff --git a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDslExtensions.kt b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDslExtensions.kt index 1ad594574b..cbfb6601fe 100644 --- a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDslExtensions.kt +++ b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/ContractDslExtensions.kt @@ -34,9 +34,7 @@ infix fun UrlPath.withQueryParameters(parameters: QueryParameters.() -> Unit) = queryParameters = QueryParameters().apply(parameters) } -fun Any.toDslProperty(): DslProperty { - return DslProperty(this) -} +fun T.toDslProperty(): DslProperty = DslProperty(this) fun Map.toDslProperties(): Map> { return entries.stream().collect(Collectors.toMap( diff --git a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/InputDsl.kt b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/InputDsl.kt index 24473090f3..69c4d89ea1 100644 --- a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/InputDsl.kt +++ b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/InputDsl.kt @@ -16,6 +16,8 @@ package org.springframework.cloud.contract.spec.internal +import org.springframework.cloud.contract.spec.toDslProperty + /** * @author Tim Ysewyn */ @@ -31,25 +33,17 @@ class InputDsl : CommonDsl(), RegexCreatingProperty { var assertThat: String? = null var bodyMatchers: BodyMatchers? = null - fun messageFrom(messageFrom: String) { - this.messageFrom = DslProperty(messageFrom) - } + fun messageFrom(messageFrom: String) = messageFrom.toDslProperty() fun headers(headers: HeadersDsl.() -> Unit) { this.headers = HeadersDsl().apply(headers).get() } - fun messageBody(vararg pairs: Pair) { - this.messageBody = Input.BodyType(pairs.toMap()) - } + fun messageBody(vararg pairs: Pair) = Input.BodyType(pairs.toMap()) - fun messageBody(pair: Pair) { - this.messageBody = Input.BodyType(mapOf(pair)) - } + fun messageBody(pair: Pair) = Input.BodyType(mapOf(pair)) - fun messageBody(value: String) { - this.messageBody = Input.BodyType(value) - } + fun messageBody(value: String) = Input.BodyType(value) fun bodyMatchers(configurer: BodyMatchersDsl.() -> Unit) { this.bodyMatchers = BodyMatchersDsl().apply(configurer).get() diff --git a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/OutputMessageDsl.kt b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/OutputMessageDsl.kt index ea3621f6ad..c0ba72687c 100644 --- a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/OutputMessageDsl.kt +++ b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/OutputMessageDsl.kt @@ -16,6 +16,8 @@ package org.springframework.cloud.contract.spec.internal +import org.springframework.cloud.contract.spec.toDslProperty + /** * @author Tim Ysewyn */ @@ -30,17 +32,13 @@ class OutputMessageDsl : CommonDsl(), RegexCreatingProperty { var assertThat: String? = null var bodyMatchers: ResponseBodyMatchers? = null - fun sentTo(sentTo: String) { - this.sentTo = DslProperty(sentTo) - } + fun sentTo(sentTo: String) = sentTo.toDslProperty() fun headers(headers: HeadersDsl.() -> Unit) { this.headers = HeadersDsl().apply(headers).get() } - fun body(body: Any) { - this.body = DslProperty(body) - } + fun body(body: Any) = body.toDslProperty() fun bodyMatchers(configurer: ResponseBodyMatchersDsl.() -> Unit) { this.bodyMatchers = ResponseBodyMatchersDsl().apply(configurer).get() diff --git a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/RequestDsl.kt b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/RequestDsl.kt index 4b852f0a38..cdbd282225 100644 --- a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/RequestDsl.kt +++ b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/RequestDsl.kt @@ -29,7 +29,7 @@ open class RequestDsl : CommonDsl(), RegexCreatingProperty { private val delegate = Request() - var method: DslProperty? = null + var method: DslProperty<*>? = null var url: Url? = null var urlPath: UrlPath? = null var headers: Headers? = null @@ -66,8 +66,6 @@ open class RequestDsl : CommonDsl(), RegexCreatingProperty { fun body(body: List) = Body(body.toDslProperties()) - fun body(body: DslProperty) = Body(body) - fun body(body: Any) = Body(body) fun multipart(multipart: Map) = Multipart(multipart.toDslProperties()) @@ -238,14 +236,14 @@ open class RequestDsl : CommonDsl(), RegexCreatingProperty { internal fun get(): Request { val request = Request() - method?.also { request.method = method!! } - url?.also { request.url = url!! } - urlPath?.also { request.urlPath = urlPath!! } - headers?.also { request.headers = headers!! } - cookies?.also { request.cookies = cookies!! } - body?.also { request.body = body!! } - multipart?.also { request.multipart = multipart!! } - bodyMatchers?.also { request.bodyMatchers = bodyMatchers!! } + method?.also { request.method = method } + url?.also { request.url = url } + urlPath?.also { request.urlPath = urlPath } + headers?.also { request.headers = headers } + cookies?.also { request.cookies = cookies } + body?.also { request.body = body } + multipart?.also { request.multipart = multipart } + bodyMatchers?.also { request.bodyMatchers = bodyMatchers } return request } diff --git a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/ResponseDsl.kt b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/ResponseDsl.kt index 27fa5a505d..184a0c1664 100644 --- a/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/ResponseDsl.kt +++ b/specs/spring-cloud-contract-spec-kotlin/src/main/kotlin/org/springframework/cloud/contract/spec/internal/ResponseDsl.kt @@ -57,8 +57,6 @@ class ResponseDsl : CommonDsl(), RegexCreatingProperty { fun body(body: List) = Body(body.toDslProperties()) - fun body(body: DslProperty) = Body(body.toDslProperty()) - fun body(body: Any) = Body(body) fun bodyMatchers(configurer: ResponseBodyMatchersDsl.() -> Unit) { diff --git a/specs/spring-cloud-contract-spec-kotlin/src/test/kotlin/org/springframework/cloud/contract/spec/ContractTests.kt b/specs/spring-cloud-contract-spec-kotlin/src/test/kotlin/org/springframework/cloud/contract/spec/ContractTests.kt index 2cd1f886e3..d10791b1a1 100644 --- a/specs/spring-cloud-contract-spec-kotlin/src/test/kotlin/org/springframework/cloud/contract/spec/ContractTests.kt +++ b/specs/spring-cloud-contract-spec-kotlin/src/test/kotlin/org/springframework/cloud/contract/spec/ContractTests.kt @@ -145,8 +145,8 @@ class ContractTests { fun `should work for messaging`() { val contract = contract { input { - messageFrom("input") - messageBody("foo" to "bar") + messageFrom = messageFrom("input") + messageBody = messageBody("foo" to "bar") headers { header { name = "foo" @@ -155,8 +155,8 @@ class ContractTests { } } outputMessage { - sentTo("output") - body("foo2" to "bar") + sentTo = sentTo("output") + body = body("foo2" to "bar") headers { header { name = "foo2"