120 lines
3.9 KiB
Haskell
120 lines
3.9 KiB
Haskell
module HTTPure.HeadersSpec where
|
|
|
|
import Prelude
|
|
|
|
import Control.Monad.Eff.Class as EffClass
|
|
import Data.Tuple as Tuple
|
|
import Test.Spec as Spec
|
|
|
|
import HTTPure.Headers as Headers
|
|
import HTTPure.Lookup ((!!))
|
|
|
|
import HTTPure.SpecHelpers as SpecHelpers
|
|
import HTTPure.SpecHelpers ((?=))
|
|
|
|
lookupSpec :: SpecHelpers.Test
|
|
lookupSpec = Spec.describe "lookup" do
|
|
Spec.describe "when the string is in the header set" do
|
|
Spec.describe "when searching with lowercase" do
|
|
Spec.it "is the string" do
|
|
mockHeaders !! "x-test" ?= "test"
|
|
Spec.describe "when searching with uppercase" do
|
|
Spec.it "is the string" do
|
|
mockHeaders !! "X-Test" ?= "test"
|
|
Spec.describe "when the string is not in the header set" do
|
|
Spec.it "is an empty string" do
|
|
(Headers.headers []) !! "X-Test" ?= ""
|
|
where
|
|
mockHeaders = Headers.headers [Tuple.Tuple "x-test" "test"]
|
|
|
|
showSpec :: SpecHelpers.Test
|
|
showSpec = Spec.describe "show" do
|
|
Spec.it "is a string representing the headers in HTTP format" do
|
|
show mockHeaders ?= "Test1: test1\nTest2: test2\n\n"
|
|
where
|
|
mockHeaders =
|
|
Headers.headers
|
|
[ Tuple.Tuple "Test1" "test1"
|
|
, Tuple.Tuple "Test2" "test2"
|
|
]
|
|
|
|
eqSpec :: SpecHelpers.Test
|
|
eqSpec = Spec.describe "eq" do
|
|
Spec.describe "when the two Headers contain the same keys and values" do
|
|
Spec.it "is true" do
|
|
eq mockHeaders1 mockHeaders2 ?= true
|
|
Spec.describe "when the two Headers contain different keys and values" do
|
|
Spec.it "is false" do
|
|
eq mockHeaders1 mockHeaders3 ?= false
|
|
Spec.describe "when the one Headers contains additional keys and values" do
|
|
Spec.it "is false" do
|
|
eq mockHeaders1 mockHeaders4 ?= false
|
|
where
|
|
mockHeaders1 = Headers.headers [ Tuple.Tuple "Test1" "test1" ]
|
|
mockHeaders2 = Headers.headers [ Tuple.Tuple "Test1" "test1" ]
|
|
mockHeaders3 = Headers.headers [ Tuple.Tuple "Test2" "test2" ]
|
|
mockHeaders4 =
|
|
Headers.headers
|
|
[ Tuple.Tuple "Test1" "test1"
|
|
, Tuple.Tuple "Test2" "test2"
|
|
]
|
|
|
|
appendSpec :: SpecHelpers.Test
|
|
appendSpec = Spec.describe "append" do
|
|
Spec.describe "when there are multiple keys" do
|
|
Spec.it "appends the headers correctly" do
|
|
mockHeaders1 <> mockHeaders2 ?= mockHeaders3
|
|
Spec.describe "when there is a duplicated key" do
|
|
Spec.it "uses the last appended value" do
|
|
mockHeadersDupe1 <> mockHeadersDupe2 ?= mockHeadersDupe2
|
|
where
|
|
mockHeadersDupe1 = Headers.headers [ Tuple.Tuple "Test" "foo" ]
|
|
mockHeadersDupe2 = Headers.headers [ Tuple.Tuple "Test" "bar" ]
|
|
mockHeaders1 =
|
|
Headers.headers
|
|
[ Tuple.Tuple "Test1" "test1"
|
|
, Tuple.Tuple "Test2" "test2"
|
|
]
|
|
mockHeaders2 =
|
|
Headers.headers
|
|
[ Tuple.Tuple "Test3" "test3"
|
|
, Tuple.Tuple "Test4" "test4"
|
|
]
|
|
mockHeaders3 =
|
|
Headers.headers
|
|
[ Tuple.Tuple "Test1" "test1"
|
|
, Tuple.Tuple "Test2" "test2"
|
|
, Tuple.Tuple "Test3" "test3"
|
|
, Tuple.Tuple "Test4" "test4"
|
|
]
|
|
|
|
readSpec :: SpecHelpers.Test
|
|
readSpec = Spec.describe "read" do
|
|
Spec.describe "with no headers" do
|
|
Spec.it "is an empty StrMap" do
|
|
request <- SpecHelpers.mockRequest "" "" "" []
|
|
Headers.read request ?= Headers.headers []
|
|
Spec.describe "with headers" do
|
|
Spec.it "is an StrMap with the contents of the headers" do
|
|
let testHeader = [Tuple.Tuple "X-Test" "test"]
|
|
request <- SpecHelpers.mockRequest "" "" "" testHeader
|
|
Headers.read request ?= Headers.headers testHeader
|
|
|
|
writeSpec :: SpecHelpers.Test
|
|
writeSpec = Spec.describe "write" do
|
|
Spec.it "writes the headers to the response" do
|
|
header <- EffClass.liftEff do
|
|
mock <- SpecHelpers.mockResponse
|
|
Headers.write mock $ Headers.headers [Tuple.Tuple "X-Test" "test"]
|
|
pure $ SpecHelpers.getResponseHeader "X-Test" mock
|
|
header ?= "test"
|
|
|
|
headersSpec :: SpecHelpers.Test
|
|
headersSpec = Spec.describe "Headers" do
|
|
lookupSpec
|
|
showSpec
|
|
eqSpec
|
|
appendSpec
|
|
readSpec
|
|
writeSpec
|