svci/src/test/groovy/biz/nellemann/svci/RestClientTest.groovy

96 lines
2.8 KiB
Groovy

package biz.nellemann.svci;
import org.mockserver.integration.ClientAndServer
import org.mockserver.logging.MockServerLogger
import org.mockserver.model.Header
import org.mockserver.model.HttpRequest
import org.mockserver.model.HttpResponse
import org.mockserver.model.MediaType
import org.mockserver.socket.PortFactory
import org.mockserver.socket.tls.KeyStoreFactory
import spock.lang.Shared
import spock.lang.Specification
import spock.lang.Stepwise
import javax.net.ssl.HttpsURLConnection
import java.util.concurrent.TimeUnit
@Stepwise
class RestClientTest extends Specification {
@Shared
private static ClientAndServer mockServer;
@Shared
private RestClient serviceClient
def setupSpec() {
HttpsURLConnection.setDefaultSSLSocketFactory(new KeyStoreFactory(new MockServerLogger()).sslContext().getSocketFactory());
mockServer = ClientAndServer.startClientAndServer(PortFactory.findFreePort());
serviceClient = new RestClient(String.format("http://localhost:%d", mockServer.getPort()), "superuser", "password", true)
}
def cleanupSpec() {
mockServer.stop()
}
def setup() {
mockServer.reset()
}
def "Test POST Request"() {
setup:
def req = HttpRequest.request()
.withMethod("POST")
.withPath("/test/post")
def res = HttpResponse.response()
.withDelay(TimeUnit.SECONDS, 1)
.withStatusCode(202)
.withHeaders(
new Header("Content-Type", "text/plain; charset=UTF-8"),
)
.withBody("Created, OK.", MediaType.TEXT_PLAIN)
mockServer.when(req).respond(res)
when:
String response = serviceClient.postRequest("/test/post", null)
then:
response == "Created, OK."
}
def "Test SVC Login"() {
setup:
def responseFile = new File(getClass().getResource('/svc-auth-response.json').toURI())
def req = HttpRequest.request()
.withHeader("X-Auth-Username", "superuser")
.withHeader("X-Auth-Password", "password")
.withMethod("POST")
.withPath("/rest/v1/auth")
def res = HttpResponse.response()
.withDelay(TimeUnit.SECONDS, 1)
.withStatusCode(200)
.withHeaders(
new Header("Content-Type", "application/json"),
)
.withBody(responseFile.getText(), MediaType.APPLICATION_JSON)
mockServer.when(req).respond(res)
when:
serviceClient.login()
then:
serviceClient.authToken == "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2Njk2MjY3MTMsImV4cCI6MTY2OTYzMDMxMywianRpIjoiN2UxYWJiZmJmNzlkMWE3YTVlNGI1MjM1M2VlZmM0ZDkiLCJzdiI6eyJ1c2VyIjoic3VwZXJ1c2VyIn19.B8MVI5XvmKi-ONX1NTaDmcMEB6SVd93kfW8beKu3Mfl70tGwCotY5-lQ3R4sZWd4hiEqvsrrCm3o1afUGlCxJw"
}
}