module TupleSpec where
import BasicPrelude
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