purescript-httpurple/Test/HTTPure/ServerSpec.purs

63 lines
1.8 KiB
Haskell
Raw Normal View History

module HTTPure.ServerSpec where
2017-07-10 10:17:13 +00:00
import Prelude (bind, discard, pure, unit, ($))
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-07-10 10:17:13 +00:00
import HTTPure.SpecHelpers as SpecHelpers
2017-07-10 10:17:13 +00:00
import HTTPure.Server as Server
import HTTPure.Route as Route
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
handleRequestSpec
2017-07-10 10:17:13 +00:00
bootSpec
serveSpec