packages feed

validators-0.0.1: tests/Data/ValidatorSpec.hs

module Data.ValidatorSpec (module Data.ValidatorSpec) where

import Data.Validation
import Data.Validator
import Test.Hspec

(==>) :: (Eq a, Show a) => a -> a -> IO ()
(==>) = shouldBe

infixr 0 ==>

data Error = TooSmall | TooBig | WrongNumber
  deriving (Eq, Show)

spec :: Spec
spec = describe "Validators" $ parallel $ do
  describe "Running validators" $ parallel $ do
    it "can run single validation on a subject" $ do
      let validator = assert (> 10) [TooSmall]
      validate validator 11 ==> Success 11
      validate validator 1 ==> Failure [TooSmall]
    it "can run multiple validations on a subject" $ do
      let validator =
            assert (< 10) [TooBig]
              <> assert (== 7) [WrongNumber]
      validate validator 7 ==> Success 7
      validate validator 6 ==> Failure [WrongNumber]
      validate validator 11 ==> Failure [TooBig, WrongNumber]