module Hydra.PartySpec where import Hydra.Prelude import Test.Hydra.Prelude import Hydra.Tx.Party (Party (..)) import Test.Aeson.GenericSpecs (roundtripAndGoldenSpecs) import Test.Hydra.Tx.Fixture (alice, bob, carol) import Test.QuickCheck ((==>)) spec :: Spec spec :: Spec spec = do String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "Ord" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do String -> ((Party, Party, Party) -> Property) -> Spec forall prop. (HasCallStack, Testable prop) => String -> prop -> Spec prop String "is transitive" (((Party, Party, Party) -> Property) -> Spec) -> ((Party, Party, Party) -> Property) -> Spec forall a b. (a -> b) -> a -> b $ \(Party x :: Party, Party y, Party z) -> Party x Party -> Party -> Bool forall a. Ord a => a -> a -> Bool <= Party y Bool -> Bool -> Bool && Party y Party -> Party -> Bool forall a. Ord a => a -> a -> Bool <= Party z Bool -> Bool -> Property forall prop. Testable prop => Bool -> prop -> Property ==> Party x Party -> Party -> Bool forall a. Ord a => a -> a -> Bool <= Party z String -> (Party -> Bool) -> Spec forall prop. (HasCallStack, Testable prop) => String -> prop -> Spec prop String "is reflexive" ((Party -> Bool) -> Spec) -> (Party -> Bool) -> Spec forall a b. (a -> b) -> a -> b $ \(Party x :: Party) -> Party x Party -> Party -> Bool forall a. Ord a => a -> a -> Bool <= Party x String -> ((Party, Party) -> Bool) -> Spec forall prop. (HasCallStack, Testable prop) => String -> prop -> Spec prop String "is antisymmetric" (((Party, Party) -> Bool) -> Spec) -> ((Party, Party) -> Bool) -> Spec forall a b. (a -> b) -> a -> b $ \(Party x :: Party, Party y) -> (Party x Party -> Party -> Bool forall a. Ord a => a -> a -> Bool <= Party y Bool -> Bool -> Bool && Party y Party -> Party -> Bool forall a. Ord a => a -> a -> Bool <= Party x) Bool -> Bool -> Bool forall a. Eq a => a -> a -> Bool == (Party x Party -> Party -> Bool forall a. Eq a => a -> a -> Bool == Party y) String -> ((Party, Party) -> Bool) -> Spec forall prop. (HasCallStack, Testable prop) => String -> prop -> Spec prop String "implements Eq and Ord correspondingly" (((Party, Party) -> Bool) -> Spec) -> ((Party, Party) -> Bool) -> Spec forall a b. (a -> b) -> a -> b $ \(Party x :: Party, Party y) -> (Party -> Party -> Ordering forall a. Ord a => a -> a -> Ordering compare Party x Party y Ordering -> Ordering -> Bool forall a. Eq a => a -> a -> Bool == Ordering EQ) Bool -> Bool -> Bool forall a. Eq a => a -> a -> Bool == (Party x Party -> Party -> Bool forall a. Eq a => a -> a -> Bool == Party y) Proxy Party -> Spec forall a. (Arbitrary a, ToJSON a, FromJSON a, Typeable a) => Proxy a -> Spec roundtripAndGoldenSpecs (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @Party) String -> Expectation -> SpecM (Arg Expectation) () forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "has alice, bob, carol sorted" (Expectation -> SpecM (Arg Expectation) ()) -> Expectation -> SpecM (Arg Expectation) () forall a b. (a -> b) -> a -> b $ [Party] -> [Party] forall a. Ord a => [a] -> [a] sort [Party alice, Party bob, Party carol] [Party] -> [Party] -> Expectation forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation `shouldBe` [Party alice, Party bob, Party carol]