Polish "Introduce TestRestTemplate Kotlin extensions"

Closes gh-11039
pull/11135/merge
Stephane Nicoll 7 years ago
parent cd98da5ee9
commit aa87c45b5d

@ -75,6 +75,16 @@
<artifactId>hamcrest-library</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
@ -115,16 +125,6 @@
<artifactId>htmlunit</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<optional>true</optional>
</dependency>
<!-- Test -->
<dependency>
<groupId>javax.json</groupId>

@ -32,7 +32,7 @@ import java.net.URI
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.getForObject(url: String, vararg uriVariables: Any): T? =
inline fun <reified T : Any> TestRestTemplate.getForObject(url: String, vararg uriVariables: Any): T? =
getForObject(url, T::class.java, *uriVariables)
/**
@ -43,7 +43,7 @@ inline fun <reified T: Any> TestRestTemplate.getForObject(url: String, vararg ur
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.getForObject(url: String, uriVariables: Map<String, Any?>): T? =
inline fun <reified T : Any> TestRestTemplate.getForObject(url: String, uriVariables: Map<String, Any?>): T? =
getForObject(url, T::class.java, uriVariables)
/**
@ -54,7 +54,7 @@ inline fun <reified T: Any> TestRestTemplate.getForObject(url: String, uriVariab
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.getForObject(url: URI): T? =
inline fun <reified T : Any> TestRestTemplate.getForObject(url: URI): T? =
getForObject(url, T::class.java)
/**
@ -65,7 +65,7 @@ inline fun <reified T: Any> TestRestTemplate.getForObject(url: URI): T? =
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.getForEntity(url: URI): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.getForEntity(url: URI): ResponseEntity<T> =
getForEntity(url, T::class.java)
/**
@ -76,7 +76,7 @@ inline fun <reified T: Any> TestRestTemplate.getForEntity(url: URI): ResponseEnt
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.getForEntity(url: String, vararg uriVariables: Any): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.getForEntity(url: String, vararg uriVariables: Any): ResponseEntity<T> =
getForEntity(url, T::class.java, *uriVariables)
/**
@ -87,7 +87,7 @@ inline fun <reified T: Any> TestRestTemplate.getForEntity(url: String, vararg ur
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.getForEntity(url: String, uriVariables: Map<String, *>): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.getForEntity(url: String, uriVariables: Map<String, *>): ResponseEntity<T> =
getForEntity(url, T::class.java, uriVariables)
/**
@ -98,7 +98,7 @@ inline fun <reified T: Any> TestRestTemplate.getForEntity(url: String, uriVariab
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.patchForObject(url: String, request: Any, vararg uriVariables: Any): T? =
inline fun <reified T : Any> TestRestTemplate.patchForObject(url: String, request: Any, vararg uriVariables: Any): T? =
patchForObject(url, request, T::class.java, *uriVariables)
/**
@ -109,7 +109,7 @@ inline fun <reified T: Any> TestRestTemplate.patchForObject(url: String, request
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.patchForObject(url: String, request: Any, uriVariables: Map<String, *>): T? =
inline fun <reified T : Any> TestRestTemplate.patchForObject(url: String, request: Any, uriVariables: Map<String, *>): T? =
patchForObject(url, request, T::class.java, uriVariables)
/**
@ -120,7 +120,7 @@ inline fun <reified T: Any> TestRestTemplate.patchForObject(url: String, request
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.patchForObject(url: URI, request: Any): T? =
inline fun <reified T : Any> TestRestTemplate.patchForObject(url: URI, request: Any): T? =
patchForObject(url, request, T::class.java)
/**
@ -131,7 +131,7 @@ inline fun <reified T: Any> TestRestTemplate.patchForObject(url: URI, request: A
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.postForObject(url: String, request: Any, vararg uriVariables: Any): T? =
inline fun <reified T : Any> TestRestTemplate.postForObject(url: String, request: Any, vararg uriVariables: Any): T? =
postForObject(url, request, T::class.java, *uriVariables)
/**
@ -142,7 +142,7 @@ inline fun <reified T: Any> TestRestTemplate.postForObject(url: String, request:
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.postForObject(url: String, request: Any, uriVariables: Map<String, *>): T? =
inline fun <reified T : Any> TestRestTemplate.postForObject(url: String, request: Any, uriVariables: Map<String, *>): T? =
postForObject(url, request, T::class.java, uriVariables)
/**
@ -153,7 +153,7 @@ inline fun <reified T: Any> TestRestTemplate.postForObject(url: String, request:
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.postForObject(url: URI, request: Any): T? =
inline fun <reified T : Any> TestRestTemplate.postForObject(url: URI, request: Any): T? =
postForObject(url, request, T::class.java)
/**
@ -164,7 +164,7 @@ inline fun <reified T: Any> TestRestTemplate.postForObject(url: URI, request: An
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.postForEntity(url: String, request: Any, vararg uriVariables: Any): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.postForEntity(url: String, request: Any, vararg uriVariables: Any): ResponseEntity<T> =
postForEntity(url, request, T::class.java, *uriVariables)
/**
@ -175,7 +175,7 @@ inline fun <reified T: Any> TestRestTemplate.postForEntity(url: String, request:
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.postForEntity(url: String, request: Any, uriVariables: Map<String, *>): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.postForEntity(url: String, request: Any, uriVariables: Map<String, *>): ResponseEntity<T> =
postForEntity(url, request, T::class.java, uriVariables)
/**
@ -186,7 +186,7 @@ inline fun <reified T: Any> TestRestTemplate.postForEntity(url: String, request:
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.postForEntity(url: URI, request: Any): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.postForEntity(url: URI, request: Any): ResponseEntity<T> =
postForEntity(url, request, T::class.java)
/**
@ -197,7 +197,7 @@ inline fun <reified T: Any> TestRestTemplate.postForEntity(url: URI, request: An
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, vararg uriVariables: Any): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, vararg uriVariables: Any): ResponseEntity<T> =
exchange(url, method, requestEntity, object : ParameterizedTypeReference<T>() {}, *uriVariables)
/**
@ -208,7 +208,7 @@ inline fun <reified T: Any> TestRestTemplate.exchange(url: String, method: HttpM
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, uriVariables: Map<String, *>): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, uriVariables: Map<String, *>): ResponseEntity<T> =
exchange(url, method, requestEntity, object : ParameterizedTypeReference<T>() {}, uriVariables)
/**
@ -219,7 +219,7 @@ inline fun <reified T: Any> TestRestTemplate.exchange(url: String, method: HttpM
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.exchange(url: URI, method: HttpMethod, requestEntity: HttpEntity<*>): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.exchange(url: URI, method: HttpMethod, requestEntity: HttpEntity<*>): ResponseEntity<T> =
exchange(url, method, requestEntity, object : ParameterizedTypeReference<T>() {})
/**
@ -230,5 +230,5 @@ inline fun <reified T: Any> TestRestTemplate.exchange(url: URI, method: HttpMeth
* @since 2.0.0
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> TestRestTemplate.exchange(requestEntity: RequestEntity<*>): ResponseEntity<T> =
inline fun <reified T : Any> TestRestTemplate.exchange(requestEntity: RequestEntity<*>): ResponseEntity<T> =
exchange(requestEntity, object : ParameterizedTypeReference<T>() {})

@ -22,7 +22,8 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Answers
import org.mockito.Mock
import org.mockito.Mockito.*
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.junit.MockitoJUnitRunner
import org.springframework.core.ParameterizedTypeReference
import org.springframework.http.HttpEntity
@ -183,7 +184,8 @@ class TestRestTemplateExtensionsTests {
val var1 = "var1"
val var2 = "var2"
template.exchange<List<Foo>>(url, method, entity, var1, var2)
verify(template, times(1)).exchange(url, method, entity, object : ParameterizedTypeReference<List<Foo>>() {}, var1, var2)
verify(template, times(1)).exchange(url, method, entity,
object : ParameterizedTypeReference<List<Foo>>() {}, var1, var2)
}
@Test
@ -193,7 +195,8 @@ class TestRestTemplateExtensionsTests {
val entity = mock<HttpEntity<Foo>>()
val vars = mapOf(Pair("key1", "value1"), Pair("key2", "value2"))
template.exchange<List<Foo>>(url, method, entity, vars)
verify(template, times(1)).exchange(url, method, entity, object : ParameterizedTypeReference<List<Foo>>() {}, vars)
verify(template, times(1)).exchange(url, method, entity,
object : ParameterizedTypeReference<List<Foo>>() {}, vars)
}
@Test
@ -202,26 +205,32 @@ class TestRestTemplateExtensionsTests {
val method = HttpMethod.GET
val entity = mock<HttpEntity<Foo>>()
template.exchange<List<Foo>>(url, method, entity)
verify(template, times(1)).exchange(url, method, entity, object : ParameterizedTypeReference<List<Foo>>() {})
verify(template, times(1)).exchange(url, method, entity,
object : ParameterizedTypeReference<List<Foo>>() {})
}
@Test
fun `exchange with reified type parameters, String, HttpEntity`() {
val entity = mock<RequestEntity<Foo>>()
template.exchange<List<Foo>>(entity)
verify(template, times(1)).exchange(entity, object : ParameterizedTypeReference<List<Foo>>() {})
verify(template, times(1)).exchange(entity,
object : ParameterizedTypeReference<List<Foo>>() {})
}
@Test
fun `RestOperations are available`() {
val extensions = Class.forName("org.springframework.boot.test.web.client.TestRestTemplateExtensionsKt")
val extensions = Class.forName(
"org.springframework.boot.test.web.client.TestRestTemplateExtensionsKt")
ReflectionUtils.doWithMethods(RestOperations::class.java) { method ->
arrayOf(ParameterizedTypeReference::class, Class::class).forEach { kClass ->
if (method.parameterTypes.contains(kClass.java)) {
val parameters = mutableListOf<Class<*>>(TestRestTemplate::class.java).apply { addAll(method.parameterTypes.filter { it != kClass.java }) }
val f = extensions.getDeclaredMethod(method.name, *parameters.toTypedArray()).kotlinFunction!!
val parameters = mutableListOf<Class<*>>(TestRestTemplate::class.java)
.apply { addAll(method.parameterTypes.filter { it != kClass.java }) }
val f = extensions.getDeclaredMethod(method.name,
*parameters.toTypedArray()).kotlinFunction!!
Assert.assertEquals(1, f.typeParameters.size)
Assert.assertEquals(listOf(Any::class.createType()), f.typeParameters[0].upperBounds)
Assert.assertEquals(listOf(Any::class.createType()),
f.typeParameters[0].upperBounds)
}
}
}

Loading…
Cancel
Save