purescript-httpurple/test/Test/HTTPure/RequestSpec.purs

84 lines
2.7 KiB
Haskell
Raw Normal View History

2017-10-26 21:19:30 +00:00
module Test.HTTPure.RequestSpec where
import Prelude
import Data.Tuple (Tuple(Tuple))
import Foreign.Object (singleton)
import HTTPure.Body (toString)
import HTTPure.Headers (headers)
import HTTPure.Method (Method(Post))
import HTTPure.Request (fromHTTPRequest, fullPath)
import HTTPure.Version (Version(HTTP1_1))
import Test.HTTPure.TestHelpers (Test, mockRequest, (?=))
import Test.Spec (describe, it)
fromHTTPRequestSpec :: Test
fromHTTPRequestSpec =
describe "fromHTTPRequest" do
it "contains the correct method" do
mock <- mockRequest'
mock.method ?= Post
it "contains the correct path" do
mock <- mockRequest'
mock.path ?= [ "test" ]
it "contains the correct query" do
mock <- mockRequest'
mock.query ?= singleton "a" "b"
it "contains the correct headers" do
mock <- mockRequest'
mock.headers ?= headers mockHeaders
it "contains the correct body" do
mockBody <- mockRequest' >>= _.body >>> toString
mockBody ?= "body"
it "contains the correct httpVersion" do
mock <- mockRequest'
mock.httpVersion ?= HTTP1_1
2017-07-18 01:51:43 +00:00
where
mockHeaders = [ Tuple "Test" "test" ]
mockHTTPRequest = mockRequest "1.1" "POST" "/test?a=b" "body" mockHeaders
mockRequest' = mockHTTPRequest >>= fromHTTPRequest
2017-07-10 10:17:13 +00:00
fullPathSpec :: Test
fullPathSpec =
describe "fullPath" do
describe "without query parameters" do
it "is correct" do
mock <- mockRequest' "/foo/bar"
fullPath mock ?= "/foo/bar"
describe "with empty path segments" do
it "strips the empty segments" do
mock <- mockRequest' "//foo////bar/"
fullPath mock ?= "/foo/bar"
describe "with only query parameters" do
it "is correct" do
mock <- mockRequest' "?a=b&c=d"
fullPath mock ?= "/?a=b&c=d"
describe "with only empty query parameters" do
it "is has the default value of '' for the empty parameters" do
mock <- mockRequest' "?a"
fullPath mock ?= "/?a="
describe "with query parameters that have special characters" do
it "percent encodes query params" do
mock <- mockRequest' "?a=%3Fx%3Dtest"
fullPath mock ?= "/?a=%3Fx%3Dtest"
describe "with empty query parameters" do
it "strips out the empty arameters" do
mock <- mockRequest' "?a=b&&&"
fullPath mock ?= "/?a=b"
describe "with a mix of segments and query parameters" do
it "is correct" do
mock <- mockRequest' "/foo///bar/?&a=b&&c"
fullPath mock ?= "/foo/bar?a=b&c="
where
mockHTTPRequest path = mockRequest "" "POST" path "body" []
mockRequest' path = mockHTTPRequest path >>= fromHTTPRequest
requestSpec :: Test
requestSpec =
describe "Request" do
fromHTTPRequestSpec
fullPathSpec