packages feed

paypal-adaptive-hoops-0.5.1.0: tests/Unit/Utils.hs

module Unit.Utils where

import Data.Aeson (FromJSON, ToJSON, eitherDecode, encode)
import qualified Data.ByteString.Lazy as B
import qualified Data.ByteString.Lazy.Char8 as BSC
import Data.Char (isSpace)
import Test.HUnit (Assertion, (@=?), assertFailure)

eqSerialized :: (ToJSON a) => FilePath -> a -> Assertion
eqSerialized x y = do
  expected <- B.readFile x
  let actual = encode y
  filterBS expected @=? filterBS actual

  where
    filterBS :: BSC.ByteString -> BSC.ByteString
    filterBS = BSC.filter (not . isSpace)

eqParsed :: (Show a, Eq a, FromJSON a) => a -> FilePath -> Assertion
eqParsed x y = do
  j <- B.readFile y
  actual <- assertDecode j
  x @=? actual

  where
    assertDecode :: FromJSON a => BSC.ByteString -> IO a
    assertDecode json = do
      let d = eitherDecode json
      assertRight d
      let Right actual = d
      return actual

      where
        assertRight :: Either String b -> Assertion
        assertRight e = case e of
                          Left s  -> assertFailure s
                          Right _ -> return ()