purescript-httpurple/test/HTTPure/HeadersSpec.purs

122 lines
4.3 KiB
Haskell
Raw Normal View History

module HTTPure.HeadersSpec where
import Prelude
import Control.Monad.Eff.Class as EffClass
2017-09-26 06:08:07 +00:00
import Data.Tuple as Tuple
import Test.Spec as Spec
import HTTPure.Headers as Headers
2017-09-26 06:08:07 +00:00
import HTTPure.Lookup ((!!))
import HTTPure.SpecHelpers as SpecHelpers
import HTTPure.SpecHelpers ((?=))
2017-07-18 01:51:43 +00:00
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
Headers.header "x-test" "test" !! "x-test" ?= "test"
2017-07-18 01:51:43 +00:00
Spec.describe "when searching with uppercase" do
Spec.it "is the string" do
Headers.header "x-test" "test" !! "X-Test" ?= "test"
2017-07-18 01:51:43 +00:00
Spec.describe "when the string is not in the header set" do
Spec.it "is an empty string" do
Headers.empty !! "X-Test" ?= ""
2017-09-26 06:08:07 +00:00
showSpec :: SpecHelpers.Test
showSpec = Spec.describe "show" do
Spec.it "is a string representing the headers in HTTP format" do
let mock = Headers.header "Test1" "1" <> Headers.header "Test2" "2"
show mock ?= "Test1: 1\nTest2: 2\n\n"
2017-09-26 06:08:07 +00:00
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
Headers.header "Test1" "test1" == Headers.header "Test1" "test1" ?= true
2017-09-26 06:08:07 +00:00
Spec.describe "when the two Headers contain different keys and values" do
Spec.it "is false" do
Headers.header "Test1" "test1" == Headers.header "Test2" "test2" ?= false
Spec.describe "when the two Headers contain only different values" do
Spec.it "is false" do
Headers.header "Test1" "test1" == Headers.header "Test1" "test2" ?= false
2017-09-26 06:08:07 +00:00
Spec.describe "when the one Headers contains additional keys and values" do
Spec.it "is false" do
let mock = Headers.header "Test1" "1" <> Headers.header "Test2" "2"
Headers.header "Test1" "1" == mock ?= false
2017-09-26 06:08:07 +00:00
2017-09-27 19:34:00 +00:00
appendSpec :: SpecHelpers.Test
appendSpec = Spec.describe "append" do
Spec.describe "when there are multiple keys" do
Spec.it "appends the headers correctly" do
let mock1 = Headers.header "Test1" "1" <> Headers.header "Test2" "2"
let mock2 = Headers.header "Test3" "3" <> Headers.header "Test4" "4"
let mock3 = Headers.headers
[ Tuple.Tuple "Test1" "1"
, Tuple.Tuple "Test2" "2"
, Tuple.Tuple "Test3" "3"
, Tuple.Tuple "Test4" "4"
]
mock1 <> mock2 ?= mock3
2017-09-27 19:34:00 +00:00
Spec.describe "when there is a duplicated key" do
Spec.it "uses the last appended value" do
let mock = Headers.header "Test" "foo" <> Headers.header "Test" "bar"
mock ?= Headers.header "Test" "bar"
2017-09-27 19:34:00 +00:00
2017-09-26 06:08:07 +00:00
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.empty
2017-09-26 06:08:07 +00:00
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
2017-07-18 01:51:43 +00:00
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.header "X-Test" "test"
pure $ SpecHelpers.getResponseHeader "X-Test" mock
header ?= "test"
emptySpec :: SpecHelpers.Test
emptySpec = Spec.describe "empty" do
Spec.it "is a empty StrMap in an empty Headers" do
show Headers.empty ?= "\n"
headerSpec :: SpecHelpers.Test
headerSpec = Spec.describe "header" do
Spec.it "creates a singleton Headers" do
show (Headers.header "X-Test" "test") ?= "X-Test: test\n\n"
headersFunctionSpec :: SpecHelpers.Test
headersFunctionSpec = Spec.describe "headers" do
Spec.it "is equivalent to using Headers.header with <>" do
test ?= expected
where
test =
Headers.headers
[ Tuple.Tuple "X-Test-1" "1"
, Tuple.Tuple "X-Test-2" "2"
]
expected = Headers.header "X-Test-1" "1" <> Headers.header "X-Test-2" "2"
headersSpec :: SpecHelpers.Test
headersSpec = Spec.describe "Headers" do
2017-07-18 01:51:43 +00:00
lookupSpec
2017-09-26 06:08:07 +00:00
showSpec
eqSpec
2017-09-27 19:34:00 +00:00
appendSpec
2017-09-26 06:08:07 +00:00
readSpec
writeSpec
emptySpec
headerSpec
headersFunctionSpec