Amaan
12/16/2021, 10:09 PMcreateTestEnvironment
in which I install Authentication but use a mockk for the verifier and validator, but that doesn't work. I also tried using JWT.require(NoneAlgorithm).build()
but that didn't work either since NoneAlgorithm can't be used outside of its package.Emirhan Emmez
12/17/2021, 12:50 PMfun TestApplicationEngine.handleRequestWithToken(
method: HttpMethod,
uri: String,
setup: TestApplicationRequest.() -> Unit = {}
): TestApplicationCall {
val token = handleRequest(<http://HttpMethod.Post|HttpMethod.Post>, "/login") {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Accept, ContentType.Application.Json.toString())
setBody(Json.encodeToString(UserRequest("emirhan", "1234")))
}.response.content
val requestSetup: TestApplicationRequest.() -> Unit = {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Accept, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Authorization, "Bearer $token")
setup.invoke(this)
}
return handleRequest(method, uri, requestSetup)
}
withBaseTestApplication {
handleRequestWithToken(HttpMethod.Get, "/user/1") {
addHeader(HttpHeaders.UserAgent, "EMIRHAN-PC")
}.apply {
assertEquals("EMIRHAN-PC", response.headers[HttpHeaders.UserAgent])
assertEquals(HttpStatusCode.OK, response.status())
}
}
fun <T> withBaseTestApplication(test: TestApplicationEngine.() -> T) {
withTestApplication {
application.testModule()
}
}
Amaan
12/17/2021, 7:29 PMfun <R> withTestMyApplication(
moduleFunction: Application.() -> Unit,
test: TestApplicationEngine.() -> R,
): R {
return withTestApplication {
application.apply {
install(Authentication) {
jwt("auth-jwt") {
verifier(Authenticator.verifier())
validate { Authenticator.validate(it) }
}
}
moduleFunction()
}
test()
}
}
fun TestApplicationEngine.handleAuthRequest(
method: HttpMethod,
uri: String,
setup: TestApplicationRequest.() -> Unit = {},
): TestApplicationCall {
val token = Authenticator.createToken()
val requestSetup: TestApplicationRequest.() -> Unit = {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Accept, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Authorization, "Bearer $token")
this.setup()
}
return this.handleRequest(method, uri, requestSetup)
Emirhan Emmez
12/18/2021, 10:05 AM