Add missing RestOperations extensions

Issue: SPR-16229
This commit is contained in:
sdeleuze
2017-11-23 22:09:34 +01:00
parent 01a82b5291
commit 3b96690e69
2 changed files with 116 additions and 0 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.web.client
import com.nhaarman.mockito_kotlin.mock
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Answers
@@ -27,7 +28,10 @@ import org.springframework.core.ParameterizedTypeReference
import org.springframework.http.HttpEntity
import org.springframework.http.HttpMethod
import org.springframework.http.RequestEntity
import org.springframework.util.ReflectionUtils
import java.net.URI
import kotlin.reflect.full.createType
import kotlin.reflect.jvm.kotlinFunction
/**
* Mock object based tests for [RestOperations] Kotlin extensions.
@@ -64,6 +68,13 @@ class RestOperationsExtensionsTests {
verify(template, times(1)).getForObject(url, Foo::class.java)
}
@Test
fun `getForEntity with reified type parameters, String and URI`() {
val url = URI("https://spring.io")
template.getForEntity<Foo>(url)
verify(template, times(1)).getForEntity(url, Foo::class.java)
}
@Test
fun `getForEntity with reified type parameters, String and varargs`() {
val url = "https://spring.io"
@@ -73,6 +84,41 @@ class RestOperationsExtensionsTests {
verify(template, times(1)).getForEntity(url, Foo::class.java, var1, var2)
}
@Test
fun `getForEntity with reified type parameters and Map`() {
val url = "https://spring.io"
val vars = mapOf(Pair("key1", "value1"), Pair("key2", "value2"))
template.getForEntity<Foo>(url, vars)
verify(template, times(1)).getForEntity(url, Foo::class.java, vars)
}
@Test
fun `patchForObject with reified type parameters, String and varargs`() {
val url = "https://spring.io"
val body: Any = "body"
val var1 = "var1"
val var2 = "var2"
template.patchForObject<Foo>(url, body, var1, var2)
verify(template, times(1)).patchForObject(url, body, Foo::class.java, var1, var2)
}
@Test
fun `patchForObject with reified type parameters, String and Map`() {
val url = "https://spring.io"
val body: Any = "body"
val vars = mapOf(Pair("key1", "value1"), Pair("key2", "value2"))
template.patchForObject<Foo>(url, body, vars)
verify(template, times(1)).patchForObject(url, body, Foo::class.java, vars)
}
@Test
fun `patchForObject with reified type parameters`() {
val url = "https://spring.io"
val body: Any = "body"
template.patchForObject<Foo>(url, body)
verify(template, times(1)).patchForObject(url, body, Foo::class.java)
}
@Test
fun `postForObject with reified type parameters, String and varargs`() {
val url = "https://spring.io"
@@ -168,6 +214,21 @@ class RestOperationsExtensionsTests {
object : ParameterizedTypeReference<List<Foo>>() {})
}
@Test
fun `RestOperations are available`() {
val extensions = Class.forName("org.springframework.web.client.RestOperationsExtensionsKt")
ReflectionUtils.doWithMethods(RestOperations::class.java) { method ->
arrayOf(ParameterizedTypeReference::class, Class::class).forEach { kClass ->
if (method.parameterTypes.contains(kClass.java)) {
val parameters = mutableListOf<Class<*>>(RestOperations::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)
}
}
}
}
class Foo
}