packages feed

json-api-lib-0.1.0.0: 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.Text (Text)
import           GHC.Generics (Generic)
import           Network.JSONApi
import           TestHelpers (prettyEncode)
import           Test.Hspec

main :: IO ()
main = hspec spec

spec :: Spec
spec =
  describe "JSON serialization" $
    it "serializes/deserializes heterogeneous maps of ToJSON types" $ do
      let boolTestData = mkMeta testObject
      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"

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"