json-api-0.1.1.2: test/Network/JSONApi/MetaSpec.hs
module Network.JSONApi.MetaSpec where
import Data.Aeson (ToJSON)
import qualified Data.Aeson as AE
import qualified Data.ByteString.Lazy.Char8 as BS
import Data.Maybe (isJust)
import Data.Monoid ((<>))
import Data.Text (Text)
import GHC.Generics (Generic)
import Network.JSONApi
import TestHelpers (prettyEncode)
import Test.Hspec
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "JSON serialization" $ do
it "serializes/deserializes heterogeneous maps of ToJSON types" $ do
let boolTestData = mkMeta testObject <> mkMeta otherTestObject
let encBoolJson = BS.unpack . prettyEncode $ boolTestData
let decBoolJson = AE.decode (BS.pack encBoolJson) :: Maybe Meta
isJust decBoolJson `shouldBe` True
testObject :: TestObject
testObject = TestObject 99 102 "Zapp Brannigan"
otherTestObject :: OtherTestObject
otherTestObject = OtherTestObject "Olive Garden" "Woofers" 29 "TGIFriday's"
data TestObject = TestObject
{ myID :: Int
, myAge :: Int
, myName :: Text
} deriving (Show, Generic)
instance ToJSON TestObject
instance MetaObject TestObject where
typeName _ = "testObject"
data OtherTestObject = OtherTestObject
{ myFavoriteRestaurant :: Text
, myDogsName :: Text
, myDogsAge :: Int
, myDogsFavoriteRestarant :: Text
} deriving (Show, Generic)
instance ToJSON OtherTestObject
instance MetaObject OtherTestObject where
typeName _ = "otherTestObject"