purescript-httpurple/test/Test/HTTPure/ResponseSpec.purs
Connor Prussin 1bde8b4b1d
Consolidate APIs (#104)
* Consolidate APIs

* Use partial function approach instead of Streamable typeclass

* Clean up
2018-08-26 21:54:04 -07:00

149 lines
4.9 KiB
Haskell

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
import Test.Spec as Spec
import HTTPure.Headers as Headers
import HTTPure.Response as Response
import Test.HTTPure.TestHelpers as TestHelpers
import Test.HTTPure.TestHelpers ((?=))
sendSpec :: TestHelpers.Test
sendSpec = Spec.describe "send" do
Spec.it "writes the headers" do
header <- do
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
Response.send httpResponse $ mockResponse unit
pure $ TestHelpers.getResponseHeader "Test" httpResponse
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"
Spec.it "writes the status" do
status <- do
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
Response.send httpResponse $ mockResponse unit
pure $ TestHelpers.getResponseStatus httpResponse
status ?= 123
Spec.it "writes the body" do
body <- do
httpResponse <- EffectClass.liftEffect $ TestHelpers.mockResponse
Response.send httpResponse $ mockResponse unit
pure $ TestHelpers.getResponseBody httpResponse
body ?= "test"
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
}
responseFunctionSpec :: TestHelpers.Test
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"
response'Spec :: TestHelpers.Test
response'Spec = Spec.describe "response'" do
Spec.it "has the right status" do
resp <- mockResponse
resp.status ?= 123
Spec.it "has the right headers" do
resp <- mockResponse
resp.headers ?= mockHeaders
Spec.it "has the right size" do
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"
where
mockHeaders = Headers.header "Test" "test"
mockResponse = Response.response' 123 mockHeaders "test"
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 ?= ""
emptyResponse'Spec :: TestHelpers.Test
emptyResponse'Spec = Spec.describe "emptyResponse'" do
Spec.it "has the right status" do
resp <- mockResponse
resp.status ?= 123
Spec.it "has the right headers" do
resp <- mockResponse
resp.headers ?= mockHeaders
Spec.it "has the right size" do
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 ?= ""
where
mockHeaders = Headers.header "Test" "test"
mockResponse = Response.emptyResponse' 123 mockHeaders
responseSpec :: TestHelpers.Test
responseSpec = Spec.describe "Response" do
sendSpec
responseFunctionSpec
response'Spec
emptyResponseSpec
emptyResponse'Spec