All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.codearte.accurest.dsl.WireMockResponseStubStrategy.groovy Maven / Gradle / Ivy

The newest version!
package io.codearte.accurest.dsl

import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder
import com.github.tomakehurst.wiremock.http.HttpHeader
import com.github.tomakehurst.wiremock.http.HttpHeaders
import com.github.tomakehurst.wiremock.http.ResponseDefinition
import groovy.transform.PackageScope
import groovy.transform.TypeChecked
import io.codearte.accurest.dsl.internal.Request
import io.codearte.accurest.dsl.internal.Response
import io.codearte.accurest.util.ContentType

import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromContent
import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromHeader

@TypeChecked
@PackageScope
class WireMockResponseStubStrategy extends BaseWireMockStubStrategy {

	private final Request request
	private final Response response

	WireMockResponseStubStrategy(GroovyDsl groovyDsl) {
		this.response = groovyDsl.response
		this.request = groovyDsl.request
	}

	@PackageScope
	ResponseDefinition buildClientResponseContent() {
		if(!response) {
			return null
		}
		ResponseDefinitionBuilder builder = new ResponseDefinitionBuilder()
				.withStatus(response.status.clientValue as Integer)
		appendHeaders(builder)
		appendBody(builder)
		appendResponseDelayTime(builder)
		return builder.build()
	}

	private void appendHeaders(ResponseDefinitionBuilder builder) {
		if (response.headers) {
			builder.withHeaders(new HttpHeaders(response.headers.entries?.collect {
				new HttpHeader(it.name, it.clientValue.toString())
			}))
		}
	}

	private void appendBody(ResponseDefinitionBuilder builder) {
		if (response.body) {
			Object body = response.body.clientValue
			ContentType contentType = recognizeContentTypeFromHeader(response.headers)
			if (contentType == ContentType.UNKNOWN) {
				contentType = recognizeContentTypeFromContent(body)
			}
			builder.withBody(parseBody(body, contentType))
		}
	}

	private void appendResponseDelayTime(ResponseDefinitionBuilder builder) {
		if (response.delay) {
			builder.withFixedDelay(response.delay.clientValue as Integer)
		}
	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy