adding tests to register page handler
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
parent
8aa3c0a39a
commit
c9f45d1bf4
@ -0,0 +1,50 @@
|
||||
package org.tbasket.test.pages
|
||||
|
||||
import zio.test.ZIOSpecDefault
|
||||
import org.tbasket.endpoint.Endpoint.handle
|
||||
import org.tbasket.handler.HandlerUtils.parseAttribute
|
||||
import org.tbasket.test.TestUtils
|
||||
import org.tbasket.test.TestUtils.getJsonBody
|
||||
import org.tbasket.test.pages.RegisterPageHandlerTests.test
|
||||
import zio.http.*
|
||||
import zio.http.model.{HeaderNames, Headers, Status}
|
||||
import zio.json.ast.JsonCursor
|
||||
import zio.test.Assertion.*
|
||||
import zio.test.*
|
||||
|
||||
object RegisterPageHandlerTests extends TBasketPageSpec("/register") {
|
||||
|
||||
|
||||
private def requestsSpec = suite("bad request tests")(
|
||||
|
||||
)
|
||||
|
||||
private def registerSpec = suite("register tests")(
|
||||
test("normal register") {
|
||||
for
|
||||
resp <- handle(Request.post(Body.fromString(s"""{"name":"tuaillon","forename":"leo","email":"leo.tuaillon@etu.uca.fr","password":"bouhours"}"""), url))
|
||||
|
||||
yield
|
||||
assert(resp)(hasField("status", _.status, equalTo(Status.Found)))
|
||||
&& assert(resp)(hasField("body", _.body, equalTo(Body.empty))) //TODO assert that the cookie name is JWT
|
||||
&& assert(resp)(hasField("headers", _.headers, exists(hasField("key", _.key, equalTo(HeaderNames.setCookie)))))
|
||||
&& assert(resp)(hasField("headers", _.headers, contains(Headers.location("/"))))
|
||||
},
|
||||
test("register again with same credentials") {
|
||||
for
|
||||
resp <- handle(Request.post(Body.fromString(s"""{"name":"tuaillon","forename":"leo","email":"leo.tuaillon@etu.uca.fr","password":"bouhours"}"""), url))
|
||||
json <- getJsonBody(resp)
|
||||
errorType <- parseAttribute(json, "error", JsonCursor.field("error").isString)
|
||||
|
||||
yield
|
||||
assert(resp)(hasField("status", _.status, equalTo(Status.NotAcceptable)))
|
||||
&& assert(errorType)(equalTo("already registered"))
|
||||
&& assert(resp)(hasField("headers", _.headers, contains(Headers.location("/login"))))
|
||||
}
|
||||
)
|
||||
|
||||
override def tspec = suite("/login page handler")(
|
||||
requestsSpec,
|
||||
registerSpec
|
||||
)
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package org.tbasket.test.pages
|
||||
|
||||
import io.getquill.NamingStrategy
|
||||
import io.getquill.context.qzio.ZioJdbcContext
|
||||
import io.getquill.context.sql.idiom.SqlIdiom
|
||||
import org.tbasket.auth.Authenticator
|
||||
import org.tbasket.data.DatabaseContext
|
||||
import zio.test.{Spec, TestEnvironment, ZIOSpecDefault}
|
||||
import org.tbasket.handler.LoginPageHandler.post
|
||||
import zio.*
|
||||
import org.tbasket.test.TestLayers.*
|
||||
import zio.http.{Client, ClientConfig, URL}
|
||||
import zio.http.netty.client.ConnectionPool
|
||||
|
||||
import javax.sql.DataSource
|
||||
|
||||
abstract class TBasketPageSpec(location: String) extends ZIOSpecDefault {
|
||||
|
||||
protected val url = URL.fromString(s"http://localhost$location") match
|
||||
case Left(value) => throw value
|
||||
case Right(url) => url
|
||||
|
||||
protected def tspec: Spec[DataSource & ClientConfig & Authenticator & ConnectionPool & Scope & DatabaseContext & Client, Any]
|
||||
|
||||
final override def spec = tspec.provide(
|
||||
db.datasourceLayer,
|
||||
db.contextLayer,
|
||||
auth,
|
||||
ConnectionPool.fixed(1),
|
||||
Scope.default,
|
||||
ClientConfig.default,
|
||||
Client.live)
|
||||
}
|
Reference in new issue