dormouse-client-0.3.0.0: test/Dormouse/Client/PayloadSpec.hs
module Dormouse.Client.PayloadSpec
( spec
) where
import Control.Monad.IO.Class
import qualified Data.Map as Map
import Data.Text.Encoding
import Dormouse.Client.Types
import Dormouse.Client.Generators.Text
import Dormouse.Client.Payload
import Data.Proxy
import Test.Hspec
import Test.Hspec.Hedgehog
import qualified Hedgehog.Range as Range
import qualified Streamly.External.ByteString as SEB
import qualified Streamly.Data.Stream as Stream
spec :: Spec
spec = before setup $ do
describe "decodeText" $ do
it "successfully decodes latin-1 text for iso-8859-1 charset" $ \sizeRanges -> do
hedgehog $ do
txt <- forAll . genLatin1BS $ sizeRanges
let
resp = HttpResponse
{ responseStatusCode = 200
, responseHeaders = Map.fromList [("Content-Type", "text/plain; charset=iso-8859-1")]
, responseBody = Stream.unfold SEB.read txt
}
expectedLatin1Text = decodeLatin1 txt
resp' <- liftIO . deserialiseRequest html $ resp
responseBody resp' === expectedLatin1Text
it "successfully decodes utf8 text for utf8 charset" $ \sizeRanges -> do
hedgehog $ do
txt <- forAll . genUtf8BS $ sizeRanges
let
resp = HttpResponse
{ responseStatusCode = 200
, responseHeaders = Map.fromList [("Content-Type", "text/plain; charset=utf8")]
, responseBody = Stream.unfold SEB.read txt
}
expectedUtf8Text = decodeUtf8 txt
resp' <- liftIO . deserialiseRequest html $ resp
responseBody resp' === expectedUtf8Text
it "successfully decodes utf8 text if no explicit charset applied" $ \sizeRanges -> do
hedgehog $ do
txt <- forAll . genUtf8BS $ sizeRanges
let
resp = HttpResponse
{ responseStatusCode = 200
, responseHeaders = Map.empty
, responseBody = Stream.unfold SEB.read txt
}
expectedUtf8Text = decodeUtf8 txt
resp' <- liftIO . deserialiseRequest html $ resp
responseBody resp' === expectedUtf8Text
where
setup = do
return $ Range.exponential 0 100000