linnet-0.1.0.0: test/EntityEndpointLaws.hs
{-# LANGUAGE ScopedTypeVariables #-}
module EntityEndpointLaws
( entityEndpointLaws
) where
import Linnet
import Linnet.Decode (DecodeEntity (..))
import Linnet.Input (Input (..))
import Test.QuickCheck (Arbitrary, property)
import Test.QuickCheck.Classes (Laws (..))
import Util
entityEndpointLaws ::
forall a m. (DecodeEntity a, Eq (m (Maybe a)), Applicative m, Arbitrary a, Show a)
=> Endpoint m a
-> (a -> Input)
-> Laws
entityEndpointLaws endpoint serialize = Laws "EntityEndpoint" properties
where
roundTrip =
property $ \(a :: a) ->
let
i = serialize a
in resultValueUnsafe (runEndpoint endpoint i) == pure (Just a)
properties = [("roundTrip", roundTrip)]