packages feed

rollbar-hs-0.1.0.0: test/Rollbar/Item/Data/Test.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Rollbar.Item.Data.Test where

import Control.Lens ((^@..))

import Data.Aeson      (encode, toJSON)
import Data.Aeson.Lens (key, members)
import Data.Text       (Text)

import Rollbar.Item
import Rollbar.QuickCheck ()

import Test.QuickCheck (conjoin, quickCheck)

props :: IO ()
props =
    quickCheck $ conjoin
        [ prop_valueDataBodyHasRequiredKey
        , prop_encodingDataBodyHasRequiredKey
        ]

prop_valueDataBodyHasRequiredKey :: Data () '["Authorization"] -> Bool
prop_valueDataBodyHasRequiredKey x =
    length ms == 1 && fst (head ms) `elem` requiredBodyKeys
    where
    ms = toJSON x ^@.. key "body" . members

prop_encodingDataBodyHasRequiredKey :: Data () '["Authorization"] -> Bool
prop_encodingDataBodyHasRequiredKey x =
    length ms == 1 && fst (head ms) `elem` requiredBodyKeys
    where
    ms = encode x ^@.. key "body" . members

requiredBodyKeys :: [Text]
requiredBodyKeys = ["trace", "trace_chain", "message", "crash_report"]