purescript-httpurple/test/Test/HTTPure/ResponseSpec.purs

149 lines
4.9 KiB
Haskell
Raw Normal View History

2017-10-26 21:19:30 +00:00
module Test.HTTPure.ResponseSpec where
import Prelude
import Data.Either as Either
import Data.Maybe as Maybe
import Effect.Aff as Aff
import Effect.Class as EffectClass
import Node.Encoding as Encoding
import Node.HTTP as HTTP
import Node.Stream as Stream
2017-07-10 10:17:13 +00:00
import Test.Spec as Spec
2017-09-26 06:08:07 +00:00
import HTTPure.Headers as Headers
2017-07-10 10:17:13 +00:00
import HTTPure.Response as Response
2017-10-26 21:19:30 +00:00
import Test.HTTPure.TestHelpers as TestHelpers
import Test.HTTPure.TestHelpers ((?=))
2017-10-26 21:19:30 +00:00
sendSpec :: TestHelpers.Test
sendSpec = Spec.describe "send" do
2017-07-19 18:59:55 +00:00
Spec.it "writes the headers" do
header <- do
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
Response.send httpResponse $ mockResponse unit
2017-10-26 21:19:30 +00:00
pure $ TestHelpers.getResponseHeader "Test" httpResponse
2017-07-19 18:59:55 +00:00
header ?= "test"
Spec.it "sets the Content-Length header" do
header <- do
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
Response.send httpResponse $ mockResponse unit
pure $ TestHelpers.getResponseHeader "Content-Length" httpResponse
header ?= "4"
2017-07-19 18:59:55 +00:00
Spec.it "writes the status" do
status <- do
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
Response.send httpResponse $ mockResponse unit
2017-10-26 21:19:30 +00:00
pure $ TestHelpers.getResponseStatus httpResponse
2017-09-26 06:08:07 +00:00
status ?= 123
2017-07-19 18:59:55 +00:00
Spec.it "writes the body" do
body <- do
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
Response.send httpResponse $ mockResponse unit
2017-10-26 21:19:30 +00:00
pure $ TestHelpers.getResponseBody httpResponse
2017-07-19 18:59:55 +00:00
body ?= "test"
2017-09-26 06:08:07 +00:00
where
mockHeaders = Headers.header "Test" "test"
mockResponse _ =
{ status: 123
, headers: mockHeaders
, writeBody: \response -> Aff.makeAff \done -> do
stream <- pure $ HTTP.responseAsStream response
_ <- Stream.writeString stream Encoding.UTF8 "test" $ pure unit
_ <- Stream.end stream $ pure unit
done $ Either.Right unit
pure Aff.nonCanceler
, size: Maybe.Just 4
}
2017-09-26 06:08:07 +00:00
2017-10-26 21:19:30 +00:00
responseFunctionSpec :: TestHelpers.Test
2017-09-26 06:08:07 +00:00
responseFunctionSpec = Spec.describe "response" do
Spec.it "has the right status" do
resp <- Response.response 123 "test"
resp.status ?= 123
Spec.it "has empty headers" do
resp <- Response.response 123 "test"
resp.headers ?= Headers.empty
Spec.it "has the right size" do
resp <- Response.response 123 "test"
resp.size ?= Maybe.Just 4
Spec.it "has the right writeBody function" do
body <- do
resp <- Response.response 123 "test"
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
resp.writeBody httpResponse
pure $ TestHelpers.getResponseBody httpResponse
body ?= "test"
2017-10-26 21:19:30 +00:00
response'Spec :: TestHelpers.Test
response'Spec = Spec.describe "response'" do
2017-09-26 06:08:07 +00:00
Spec.it "has the right status" do
resp <- mockResponse
2017-09-27 19:34:00 +00:00
resp.status ?= 123
2017-09-26 06:08:07 +00:00
Spec.it "has the right headers" do
resp <- mockResponse
2017-09-27 19:34:00 +00:00
resp.headers ?= mockHeaders
Spec.it "has the right size" do
2017-09-26 06:08:07 +00:00
resp <- mockResponse
resp.size ?= Maybe.Just 4
Spec.it "has the right writeBody function" do
body <- do
resp <- mockResponse
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
resp.writeBody httpResponse
pure $ TestHelpers.getResponseBody httpResponse
body ?= "test"
2017-09-26 06:08:07 +00:00
where
mockHeaders = Headers.header "Test" "test"
mockResponse = Response.response' 123 mockHeaders "test"
2017-09-26 06:08:07 +00:00
2017-10-26 21:19:30 +00:00
emptyResponseSpec :: TestHelpers.Test
emptyResponseSpec = Spec.describe "emptyResponse" do
Spec.it "has the right status" do
resp <- Response.emptyResponse 123
resp.status ?= 123
Spec.it "has empty headers" do
resp <- Response.emptyResponse 123
resp.headers ?= Headers.empty
Spec.it "has the right size" do
resp <- Response.emptyResponse 123
resp.size ?= Maybe.Just 0
Spec.it "has the right writeBody function" do
body <- do
resp <- Response.emptyResponse 123
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
resp.writeBody httpResponse
pure $ TestHelpers.getResponseBody httpResponse
body ?= ""
2017-10-26 21:19:30 +00:00
emptyResponse'Spec :: TestHelpers.Test
emptyResponse'Spec = Spec.describe "emptyResponse'" do
2017-09-26 06:08:07 +00:00
Spec.it "has the right status" do
resp <- mockResponse
2017-09-27 19:34:00 +00:00
resp.status ?= 123
2017-09-26 06:08:07 +00:00
Spec.it "has the right headers" do
resp <- mockResponse
2017-09-27 19:34:00 +00:00
resp.headers ?= mockHeaders
Spec.it "has the right size" do
2017-09-26 06:08:07 +00:00
resp <- mockResponse
resp.size ?= Maybe.Just 0
Spec.it "has the right writeBody function" do
body <- do
resp <- mockResponse
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
resp.writeBody httpResponse
pure $ TestHelpers.getResponseBody httpResponse
body ?= ""
2017-09-26 06:08:07 +00:00
where
mockHeaders = Headers.header "Test" "test"
mockResponse = Response.emptyResponse' 123 mockHeaders
2017-07-10 10:17:13 +00:00
2017-10-26 21:19:30 +00:00
responseSpec :: TestHelpers.Test
responseSpec = Spec.describe "Response" do
sendSpec
2017-09-26 06:08:07 +00:00
responseFunctionSpec
response'Spec
emptyResponseSpec
emptyResponse'Spec