hspec-snap-0.3.3.0: spec/Utils.hs
{-# LANGUAGE OverloadedStrings #-}
{-|
Module : Utils
Description : Helpers for testing
-}
module Utils where
import Data.Aeson (decode, encode, FromJSON, ToJSON)
import Control.Applicative ((<$>))
import Snap.Core (modifyResponse, readRequestBody
,setHeader, writeLBS ,MonadSnap)
-- | Attempts to parse JSON from a request body of max 1MiB
parseJsonBody :: (MonadSnap m, FromJSON fj) => m (Maybe fj)
parseJsonBody = decode <$> readRequestBody 1048576
-------------------------------------------------------------------------------
-- | Set MIME to 'application/json' and write given object into
-- 'Response' body.
writeJSON :: (MonadSnap m, ToJSON a) => a -> m ()
writeJSON a = do
jsonResponse
writeLBS . encode $ a
-------------------------------------------------------------------------------
-- | Mark response as 'application/json'
jsonResponse :: MonadSnap m => m ()
jsonResponse = modifyResponse $ setHeader "Content-Type" "application/json"