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