Separate headers into request and response headers
- Add response header construction using records - Update tests and examples - Update doc
This commit is contained in:
@@ -7,7 +7,7 @@ import Effect.Aff (Aff)
|
||||
import Effect.Class (liftEffect)
|
||||
import Effect.Ref (new) as Ref
|
||||
import HTTPurple.Body (RequestBody, defaultHeaders, read, toBuffer, toStream, toString, write)
|
||||
import HTTPurple.Headers (header)
|
||||
import HTTPurple.Headers (mkRequestHeader)
|
||||
import Node.Buffer (Buffer, fromString)
|
||||
import Node.Buffer (toString) as Buffer
|
||||
import Node.Encoding (Encoding(UTF8))
|
||||
@@ -72,20 +72,20 @@ defaultHeadersSpec =
|
||||
describe "with an ASCII string" do
|
||||
it "has the correct Content-Length header" do
|
||||
headers <- liftEffect $ defaultHeaders "ascii"
|
||||
headers ?= header "Content-Length" "5"
|
||||
headers ?= (mkRequestHeader "Content-Length" "5")
|
||||
describe "with a UTF-8 string" do
|
||||
it "has the correct Content-Length header" do
|
||||
headers <- liftEffect $ defaultHeaders "\x2603"
|
||||
headers ?= header "Content-Length" "3"
|
||||
headers ?= (mkRequestHeader "Content-Length" "3")
|
||||
describe "Buffer" do
|
||||
it "has the correct Content-Length header" do
|
||||
buf :: Buffer <- liftEffect $ fromString "foobar" UTF8
|
||||
headers <- liftEffect $ defaultHeaders buf
|
||||
headers ?= header "Content-Length" "6"
|
||||
headers ?= (mkRequestHeader "Content-Length" "6")
|
||||
describe "Readable" do
|
||||
it "specifies the Transfer-Encoding header" do
|
||||
headers <- liftEffect $ defaultHeaders $ stringToStream "test"
|
||||
headers ?= header "Transfer-Encoding" "chunked"
|
||||
headers ?= (mkRequestHeader "Transfer-Encoding" "chunked")
|
||||
|
||||
writeSpec :: Test
|
||||
writeSpec =
|
||||
|
||||
@@ -5,7 +5,7 @@ import Prelude
|
||||
import Data.Maybe (Maybe(Nothing, Just))
|
||||
import Data.Tuple (Tuple(Tuple))
|
||||
import Effect.Class (liftEffect)
|
||||
import HTTPurple.Headers (empty, header, headers, read, write)
|
||||
import HTTPurple.Headers (empty, header, headers, mkRequestHeader, mkRequestHeaders, read, write)
|
||||
import HTTPurple.Lookup ((!!))
|
||||
import Test.HTTPurple.TestHelpers ((?=))
|
||||
import Test.HTTPurple.TestHelpers as TestHelpers
|
||||
@@ -17,20 +17,20 @@ lookupSpec =
|
||||
describe "when the string is in the header set" do
|
||||
describe "when searching with lowercase" do
|
||||
it "is Just the string" do
|
||||
header "x-test" "test" !! "x-test" ?= Just "test"
|
||||
mkRequestHeader "x-test" "test" !! "x-test" ?= Just "test"
|
||||
describe "when searching with uppercase" do
|
||||
it "is Just the string" do
|
||||
header "x-test" "test" !! "X-Test" ?= Just "test"
|
||||
mkRequestHeader "x-test" "test" !! "X-Test" ?= Just "test"
|
||||
describe "when the string is uppercase" do
|
||||
describe "when searching with lowercase" do
|
||||
it "is Just the string" do
|
||||
header "X-Test" "test" !! "x-test" ?= Just "test"
|
||||
mkRequestHeader "X-Test" "test" !! "x-test" ?= Just "test"
|
||||
describe "when searching with uppercase" do
|
||||
it "is Just the string" do
|
||||
header "X-Test" "test" !! "X-Test" ?= Just "test"
|
||||
mkRequestHeader "X-Test" "test" !! "X-Test" ?= Just "test"
|
||||
describe "when the string is not in the header set" do
|
||||
it "is Nothing" do
|
||||
((empty !! "X-Test") :: Maybe String) ?= Nothing
|
||||
((mkRequestHeaders [] !! "X-Test") :: Maybe String) ?= Nothing
|
||||
|
||||
showSpec :: TestHelpers.Test
|
||||
showSpec =
|
||||
@@ -83,12 +83,12 @@ readSpec =
|
||||
describe "with no headers" do
|
||||
it "is an empty Map" do
|
||||
request <- TestHelpers.mockRequest "" "" "" "" []
|
||||
read request ?= empty
|
||||
read request ?= (mkRequestHeaders [])
|
||||
describe "with headers" do
|
||||
it "is a Map with the contents of the headers" do
|
||||
let testHeader = [ Tuple "X-Test" "test" ]
|
||||
request <- TestHelpers.mockRequest "" "" "" "" testHeader
|
||||
read request ?= headers testHeader
|
||||
read request ?= mkRequestHeaders testHeader
|
||||
|
||||
writeSpec :: TestHelpers.Test
|
||||
writeSpec =
|
||||
@@ -98,7 +98,7 @@ writeSpec =
|
||||
mock <- TestHelpers.mockResponse
|
||||
write mock $ header "X-Test" "test"
|
||||
pure $ TestHelpers.getResponseHeader "X-Test" mock
|
||||
header ?= "test"
|
||||
header ?= [ "test" ]
|
||||
|
||||
emptySpec :: TestHelpers.Test
|
||||
emptySpec =
|
||||
|
||||
@@ -3,10 +3,12 @@ module Test.HTTPurple.ResponseSpec where
|
||||
import Prelude
|
||||
|
||||
import Data.Either (Either(Right))
|
||||
import Debug (spy)
|
||||
import Effect.Aff (makeAff, nonCanceler)
|
||||
import Effect.Class (liftEffect)
|
||||
import HTTPurple.Body (defaultHeaders)
|
||||
import HTTPurple.Headers (header, toResponseHeaders)
|
||||
import HTTPurple.Headers (toResponseHeaders)
|
||||
import HTTPurple.Headers as Headers
|
||||
import HTTPurple.Response (emptyResponse, emptyResponse', response, response', send)
|
||||
import Node.Encoding (Encoding(UTF8))
|
||||
import Node.HTTP (responseAsStream)
|
||||
@@ -20,7 +22,7 @@ sendSpec =
|
||||
let
|
||||
mockResponse' =
|
||||
{ status: 123
|
||||
, headers: header "Test" "test"
|
||||
, headers: Headers.header "Test" "test"
|
||||
, writeBody:
|
||||
\response -> makeAff \done -> do
|
||||
stream <- pure $ responseAsStream response
|
||||
@@ -32,7 +34,7 @@ sendSpec =
|
||||
httpResponse <- liftEffect mockResponse
|
||||
send httpResponse mockResponse'
|
||||
pure $ getResponseHeader "Test" httpResponse
|
||||
header ?= "test"
|
||||
header ?= [ "test" ]
|
||||
it "writes the status" do
|
||||
status <- do
|
||||
httpResponse <- liftEffect mockResponse
|
||||
@@ -68,7 +70,7 @@ response'Spec :: Test
|
||||
response'Spec =
|
||||
describe "response'" do
|
||||
let
|
||||
mockHeaders = header "Test" "test"
|
||||
mockHeaders = Headers.header "Test" "test"
|
||||
mockResponse' = response' 123 mockHeaders "test"
|
||||
it "has the right status" do
|
||||
resp <- mockResponse'
|
||||
@@ -107,7 +109,7 @@ emptyResponse'Spec :: Test
|
||||
emptyResponse'Spec =
|
||||
describe "emptyResponse'" do
|
||||
let
|
||||
mockHeaders = header "Test" "test"
|
||||
mockHeaders = Headers.header "Test" "test"
|
||||
mockResponse' = emptyResponse' 123 mockHeaders
|
||||
it "has the right status" do
|
||||
resp <- mockResponse'
|
||||
|
||||
@@ -230,12 +230,12 @@ getResponseStatus :: HTTP.Response -> Int
|
||||
getResponseStatus = _.statusCode <<< unsafeCoerce
|
||||
|
||||
-- | Get all current headers on the HTTP Response object.
|
||||
getResponseHeaders :: HTTP.Response -> Object String
|
||||
getResponseHeaders :: HTTP.Response -> Object (Array String)
|
||||
getResponseHeaders = unsafeCoerce <<< _.headers <<< unsafeCoerce
|
||||
|
||||
-- | Get the current value for the header on the HTTP Response object.
|
||||
getResponseHeader :: String -> HTTP.Response -> String
|
||||
getResponseHeader header = fromMaybe "" <<< lookup header <<< getResponseHeaders
|
||||
getResponseHeader :: String -> HTTP.Response -> Array String
|
||||
getResponseHeader header = fromMaybe [ "" ] <<< lookup header <<< getResponseHeaders
|
||||
|
||||
-- | Create a stream out of a string.
|
||||
foreign import stringToStream :: String -> Readable ()
|
||||
|
||||
Reference in New Issue
Block a user