2017-10-26 21:19:30 +00:00
|
|
|
module Test.HTTPure.BodySpec where
|
2017-07-14 06:28:57 +00:00
|
|
|
|
2017-07-18 05:31:46 +00:00
|
|
|
import Prelude
|
2021-11-16 04:02:36 +00:00
|
|
|
import Data.Maybe (Maybe(Nothing), fromMaybe)
|
2018-07-08 23:16:48 +00:00
|
|
|
import Effect.Class as EffectClass
|
2018-08-25 04:49:28 +00:00
|
|
|
import Node.Buffer as Buffer
|
|
|
|
import Node.Encoding as Encoding
|
2021-11-16 04:02:36 +00:00
|
|
|
import Node.Stream as Stream
|
2017-07-14 06:28:57 +00:00
|
|
|
import Test.Spec as Spec
|
2017-07-17 23:42:13 +00:00
|
|
|
import HTTPure.Body as Body
|
2018-08-30 22:01:49 +00:00
|
|
|
import HTTPure.Headers as Headers
|
2017-10-26 21:19:30 +00:00
|
|
|
import Test.HTTPure.TestHelpers as TestHelpers
|
2021-11-16 04:02:36 +00:00
|
|
|
import Test.HTTPure.TestHelpers ((?=), stringToStream)
|
2017-07-14 06:28:57 +00:00
|
|
|
|
2017-10-26 21:19:30 +00:00
|
|
|
readSpec :: TestHelpers.Test
|
2021-03-22 19:02:36 +00:00
|
|
|
readSpec =
|
|
|
|
Spec.describe "read" do
|
|
|
|
Spec.it "is the body of the Request" do
|
2021-11-16 04:02:36 +00:00
|
|
|
body <- Body.read <$> TestHelpers.mockRequest "" "GET" "" "test" []
|
|
|
|
string <- EffectClass.liftEffect $ fromMaybe "" <$> Stream.readString body Nothing Encoding.UTF8
|
|
|
|
string ?= "test"
|
|
|
|
|
|
|
|
toStringSpec :: TestHelpers.Test
|
|
|
|
toStringSpec =
|
|
|
|
Spec.describe "toString" do
|
|
|
|
Spec.it "slurps Streams into Strings" do
|
|
|
|
string <- Body.toString $ stringToStream "foobar"
|
|
|
|
string ?= "foobar"
|
|
|
|
|
|
|
|
toBufferSpec :: TestHelpers.Test
|
|
|
|
toBufferSpec =
|
|
|
|
Spec.describe "toBuffer" do
|
|
|
|
Spec.it "slurps Streams into Buffers" do
|
|
|
|
buf <- Body.toBuffer $ stringToStream "foobar"
|
|
|
|
string <- EffectClass.liftEffect $ Buffer.toString Encoding.UTF8 buf
|
|
|
|
string ?= "foobar"
|
2017-07-18 05:25:14 +00:00
|
|
|
|
2018-08-30 22:01:49 +00:00
|
|
|
defaultHeadersSpec :: TestHelpers.Test
|
2021-03-22 19:02:36 +00:00
|
|
|
defaultHeadersSpec =
|
|
|
|
Spec.describe "defaultHeaders" do
|
|
|
|
Spec.describe "String" do
|
|
|
|
Spec.describe "with an ASCII string" do
|
|
|
|
Spec.it "has the correct Content-Length header" do
|
|
|
|
headers <- EffectClass.liftEffect $ Body.defaultHeaders "ascii"
|
|
|
|
headers ?= Headers.header "Content-Length" "5"
|
|
|
|
Spec.describe "with a UTF-8 string" do
|
|
|
|
Spec.it "has the correct Content-Length header" do
|
|
|
|
headers <- EffectClass.liftEffect $ Body.defaultHeaders "\x2603"
|
|
|
|
headers ?= Headers.header "Content-Length" "3"
|
|
|
|
Spec.describe "Buffer" do
|
2018-08-30 22:01:49 +00:00
|
|
|
Spec.it "has the correct Content-Length header" do
|
2021-03-22 19:02:36 +00:00
|
|
|
buf :: Buffer.Buffer <- EffectClass.liftEffect $ Buffer.fromString "foobar" Encoding.UTF8
|
|
|
|
headers <- EffectClass.liftEffect $ Body.defaultHeaders buf
|
|
|
|
headers ?= Headers.header "Content-Length" "6"
|
|
|
|
Spec.describe "Readable" do
|
|
|
|
Spec.it "specifies the Transfer-Encoding header" do
|
|
|
|
let
|
|
|
|
body = TestHelpers.stringToStream "test"
|
|
|
|
headers <- EffectClass.liftEffect $ Body.defaultHeaders body
|
|
|
|
headers ?= Headers.header "Transfer-Encoding" "chunked"
|
2018-08-25 04:49:28 +00:00
|
|
|
|
2017-10-26 21:19:30 +00:00
|
|
|
writeSpec :: TestHelpers.Test
|
2021-03-22 19:02:36 +00:00
|
|
|
writeSpec =
|
|
|
|
Spec.describe "write" do
|
|
|
|
Spec.describe "String" do
|
|
|
|
Spec.it "writes the String to the Response body" do
|
|
|
|
body <- do
|
|
|
|
resp <- EffectClass.liftEffect TestHelpers.mockResponse
|
|
|
|
Body.write "test" resp
|
|
|
|
pure $ TestHelpers.getResponseBody resp
|
|
|
|
body ?= "test"
|
|
|
|
Spec.describe "Buffer" do
|
|
|
|
Spec.it "writes the Buffer to the Response body" do
|
|
|
|
body <- do
|
|
|
|
resp <- EffectClass.liftEffect TestHelpers.mockResponse
|
|
|
|
buf :: Buffer.Buffer <- EffectClass.liftEffect $ Buffer.fromString "test" Encoding.UTF8
|
|
|
|
Body.write buf resp
|
|
|
|
pure $ TestHelpers.getResponseBody resp
|
|
|
|
body ?= "test"
|
|
|
|
Spec.describe "Readable" do
|
|
|
|
Spec.it "pipes the input stream to the Response body" do
|
|
|
|
body <- do
|
|
|
|
resp <- EffectClass.liftEffect TestHelpers.mockResponse
|
|
|
|
Body.write (TestHelpers.stringToStream "test") resp
|
|
|
|
pure $ TestHelpers.getResponseBody resp
|
|
|
|
body ?= "test"
|
2017-07-17 23:42:13 +00:00
|
|
|
|
2017-10-26 21:19:30 +00:00
|
|
|
bodySpec :: TestHelpers.Test
|
2021-03-22 19:02:36 +00:00
|
|
|
bodySpec =
|
|
|
|
Spec.describe "Body" do
|
|
|
|
defaultHeadersSpec
|
|
|
|
readSpec
|
2021-11-16 04:02:36 +00:00
|
|
|
toStringSpec
|
|
|
|
toBufferSpec
|
2021-03-22 19:02:36 +00:00
|
|
|
writeSpec
|