hreq-conduit-0.1.0.0: test/Hreq/HttpBin/SuccessSpec.hs
module Hreq.HttpBin.SuccessSpec (spec) where
import Conduit
import Data.String.Conversions (cs)
import qualified Data.Text as T
import Hreq.Conduit
import Test.Hspec
spec :: Spec
spec = describe "Hreq.HttpBin.SuccessSpec" successSpec
runHttpBin :: Hreq IO a -> IO a
runHttpBin action = runHreq baseUrl action
where
baseUrl = HttpsDomain "httpbin.org"
successSpec :: Spec
successSpec = do
describe "Streaming" $ do
describe "works with responses" $ do
it "receiving a stream of data" $ do
let size = 3 * 1024 * 1024 -- amount of data to stream in MBs
let streamBytes = hreqWithConduit @("stream-bytes" :> Capture Int :> StreamGet) (size :. Empty)
runHttpBin
$ streamBytes
$ \ src -> do
tempFile <- runConduitRes $ src .| sinkSystemTempFile "hreq.json"
tempFile `shouldContain` "hreq"
describe "works with request bodies" $ do
it "streaming a file " $ do
let streamReq src = hreq @("post" :> ConduitReqBody :> RawResponse POST) $ src :. Empty
withSourceFile "README.md" $
\srcFile -> do
let src :: ReqBodySource
src = ReqBodySource
$ srcFile
.| decodeUtf8C
.| mapC T.toUpper
.| encodeUtf8C
res <- runHttpBin $ streamReq src
cs (resBody res) `shouldContain` "HREQ"