2017-05-25 19:12:29 +00:00
|
|
|
module HTTPure.ServerSpec where
|
|
|
|
|
2017-07-10 10:17:13 +00:00
|
|
|
import Prelude (bind, discard, pure, unit, ($))
|
2017-05-25 19:12:29 +00:00
|
|
|
|
2017-07-10 10:17:13 +00:00
|
|
|
import Control.Monad.Eff.Class as EffClass
|
|
|
|
import Data.Maybe as Maybe
|
|
|
|
import Node.Encoding as Encoding
|
|
|
|
import Node.StreamBuffer as StreamBuffer
|
|
|
|
import Test.Spec as Spec
|
|
|
|
import Test.Spec.Assertions as Assertions
|
2017-05-25 19:12:29 +00:00
|
|
|
|
2017-07-10 10:17:13 +00:00
|
|
|
import HTTPure.SpecHelpers as SpecHelpers
|
2017-05-25 19:12:29 +00:00
|
|
|
|
2017-07-10 10:17:13 +00:00
|
|
|
import HTTPure.Server as Server
|
|
|
|
import HTTPure.Route as Route
|
2017-05-25 19:12:29 +00:00
|
|
|
|
2017-07-10 10:17:13 +00:00
|
|
|
routes :: forall e. Array (Route.Route e)
|
|
|
|
routes =
|
|
|
|
[ Route.Get "/test1"
|
|
|
|
{ status: \_ -> 200
|
|
|
|
, headers: \_ -> []
|
|
|
|
, body: \_ -> "test1"
|
|
|
|
}
|
|
|
|
, Route.Get "/test2"
|
|
|
|
{ status: \_ -> 200
|
|
|
|
, headers: \_ -> []
|
|
|
|
, body: \_ -> "test2"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
handleRequestSpec :: SpecHelpers.Test
|
|
|
|
handleRequestSpec = Spec.describe "handleRequest" $
|
|
|
|
Spec.it "matches and runs a route" do
|
|
|
|
body <- EffClass.liftEff do
|
|
|
|
buf <- StreamBuffer.writable
|
|
|
|
Server.handleRequest routes mockRequest $ SpecHelpers.mockHTTPResponse buf
|
|
|
|
StreamBuffer.contents Encoding.UTF8 buf
|
|
|
|
body `Assertions.shouldEqual` "test1"
|
|
|
|
where
|
|
|
|
mockRequest = SpecHelpers.mockHTTPRequest "/test1"
|
|
|
|
|
|
|
|
bootSpec :: SpecHelpers.Test
|
|
|
|
bootSpec = Spec.describe "boot" $
|
|
|
|
Spec.it "boots a server with the given options" do
|
|
|
|
EffClass.liftEff $ Server.boot options routes $ pure unit
|
|
|
|
out <- SpecHelpers.get "http://localhost:7900/test1"
|
|
|
|
out `Assertions.shouldEqual` "test1"
|
|
|
|
where
|
|
|
|
options = { port: 7900, hostname: "localhost", backlog: Maybe.Nothing }
|
|
|
|
|
|
|
|
serveSpec :: SpecHelpers.Test
|
|
|
|
serveSpec = Spec.describe "serve" $
|
|
|
|
Spec.it "boots a server on the given port" do
|
|
|
|
EffClass.liftEff $ Server.serve 7901 routes $ pure unit
|
|
|
|
out <- SpecHelpers.get "http://localhost:7901/test2"
|
|
|
|
out `Assertions.shouldEqual` "test2"
|
|
|
|
|
|
|
|
serverSpec :: SpecHelpers.Test
|
|
|
|
serverSpec = Spec.describe "Server" do
|
2017-05-25 19:12:29 +00:00
|
|
|
handleRequestSpec
|
2017-07-10 10:17:13 +00:00
|
|
|
bootSpec
|
2017-05-25 19:12:29 +00:00
|
|
|
serveSpec
|