packages feed

composite-aeson-0.3.0.0: test/TupleSpec.hs

module TupleSpec where

import Composite.Aeson.Base (JsonFormat, fromJsonWithFormat, toJsonWithFormat)
import Composite.Aeson.Formats.Provided (tuple3JsonFormat, integralJsonFormat, stringJsonFormat, charJsonFormat)
import Data.Aeson.BetterErrors (parseValue)
import Data.Void (Void)
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.QuickCheck (property)

tupleSuite :: Spec
tupleSuite =
  describe "Tuple formats" $ do
    it "works for 3-tuples" $ do
      let fmt = tuple3JsonFormat (integralJsonFormat :: JsonFormat Void Int) stringJsonFormat charJsonFormat
      property $ \ t ->
        parseValue (fromJsonWithFormat fmt) (toJsonWithFormat fmt t) `shouldBe` Right t