139 lines
4.5 KiB
Haskell
139 lines
4.5 KiB
Haskell
module Test.HTTPurple.HeadersSpec where
|
|
|
|
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.Lookup ((!!))
|
|
import Test.HTTPurple.TestHelpers ((?=))
|
|
import Test.HTTPurple.TestHelpers as TestHelpers
|
|
import Test.Spec (describe, it)
|
|
|
|
lookupSpec :: TestHelpers.Test
|
|
lookupSpec =
|
|
describe "lookup" do
|
|
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"
|
|
describe "when searching with uppercase" do
|
|
it "is Just the string" do
|
|
header "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"
|
|
describe "when searching with uppercase" do
|
|
it "is Just the string" do
|
|
header "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
|
|
|
|
showSpec :: TestHelpers.Test
|
|
showSpec =
|
|
describe "show" do
|
|
it "is a string representing the headers in HTTP format" do
|
|
let mock = header "Test1" "1" <> header "Test2" "2"
|
|
show mock ?= "Test1: 1\nTest2: 2\n\n"
|
|
|
|
eqSpec :: TestHelpers.Test
|
|
eqSpec =
|
|
describe "eq" do
|
|
describe "when the two Headers contain the same keys and values" do
|
|
it "is true" do
|
|
header "Test1" "test1" == header "Test1" "test1" ?= true
|
|
describe "when the two Headers contain different keys and values" do
|
|
it "is false" do
|
|
header "Test1" "test1" == header "Test2" "test2" ?= false
|
|
describe "when the two Headers contain only different values" do
|
|
it "is false" do
|
|
header "Test1" "test1" == header "Test1" "test2" ?= false
|
|
describe "when the one Headers contains additional keys and values" do
|
|
it "is false" do
|
|
let mock = header "Test1" "1" <> header "Test2" "2"
|
|
header "Test1" "1" == mock ?= false
|
|
|
|
appendSpec :: TestHelpers.Test
|
|
appendSpec =
|
|
describe "append" do
|
|
describe "when there are multiple keys" do
|
|
it "appends the headers correctly" do
|
|
let
|
|
mock1 = header "Test1" "1" <> header "Test2" "2"
|
|
mock2 = header "Test3" "3" <> header "Test4" "4"
|
|
mock3 =
|
|
headers
|
|
[ Tuple "Test1" "1"
|
|
, Tuple "Test2" "2"
|
|
, Tuple "Test3" "3"
|
|
, Tuple "Test4" "4"
|
|
]
|
|
mock1 <> mock2 ?= mock3
|
|
describe "when there is a duplicated key" do
|
|
it "uses the last appended value" do
|
|
let mock = header "Test" "foo" <> header "Test" "bar"
|
|
mock ?= header "Test" "bar"
|
|
|
|
readSpec :: TestHelpers.Test
|
|
readSpec =
|
|
describe "read" do
|
|
describe "with no headers" do
|
|
it "is an empty Map" do
|
|
request <- TestHelpers.mockRequest "" "" "" "" []
|
|
read request ?= empty
|
|
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
|
|
|
|
writeSpec :: TestHelpers.Test
|
|
writeSpec =
|
|
describe "write" do
|
|
it "writes the headers to the response" do
|
|
header <- liftEffect do
|
|
mock <- TestHelpers.mockResponse
|
|
write mock $ header "X-Test" "test"
|
|
pure $ TestHelpers.getResponseHeader "X-Test" mock
|
|
header ?= "test"
|
|
|
|
emptySpec :: TestHelpers.Test
|
|
emptySpec =
|
|
describe "empty" do
|
|
it "is an empty Map in an empty Headers" do
|
|
show empty ?= "\n"
|
|
|
|
headerSpec :: TestHelpers.Test
|
|
headerSpec =
|
|
describe "header" do
|
|
it "creates a singleton Headers" do
|
|
show (header "X-Test" "test") ?= "X-Test: test\n\n"
|
|
|
|
headersFunctionSpec :: TestHelpers.Test
|
|
headersFunctionSpec =
|
|
describe "headers" do
|
|
it "is equivalent to using header with <>" do
|
|
let
|
|
expected = header "X-Test-1" "1" <> header "X-Test-2" "2"
|
|
test = headers
|
|
[ Tuple "X-Test-1" "1"
|
|
, Tuple "X-Test-2" "2"
|
|
]
|
|
test ?= expected
|
|
|
|
headersSpec :: TestHelpers.Test
|
|
headersSpec =
|
|
describe "Headers" do
|
|
lookupSpec
|
|
showSpec
|
|
eqSpec
|
|
appendSpec
|
|
readSpec
|
|
writeSpec
|
|
emptySpec
|
|
headerSpec
|
|
headersFunctionSpec
|