avro-0.6.2.1: test/Avro/Codec/NestedSpec.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Avro.Codec.NestedSpec (spec) where
import Avro.TestUtils
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
import Test.Hspec
import Data.Avro.Deriving (deriveAvroFromByteString, r)
import qualified Data.Avro.Schema.Schema as Schema
{- HLINT ignore "Redundant do" -}
deriveAvroFromByteString [r|
{
"type": "record",
"name": "ParentType",
"namespace": "test.contract",
"fields": [
{"name": "parentValue1", "type": "int" },
{"name": "parentValue2", "type":
{"type": "array",
"items": {"type": "record", "name": "ChildType", "fields": [
{"name": "childValue1", "type": "int"},
{"name": "childValue2", "type": "int"}
]}
}
}
]
}
|]
childTypeGen :: MonadGen m => m ChildType
childTypeGen = ChildType <$> Gen.int32 Range.linearBounded <*> Gen.int32 Range.linearBounded
parentTypeGen :: MonadGen m => m ParentType
parentTypeGen = ParentType
<$> Gen.int32 Range.linearBounded
<*> Gen.list (Range.linear 0 100) childTypeGen
spec :: Spec
spec = describe "Avro.Codec.NestedSpec" $ do
it "Can encode/decode nested structures" $ require $ property $ do
roundtripGen schema'ParentType parentTypeGen