mackerel-client-0.0.5: test/Types/GraphAnnotationSpec.hs
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
module Types.GraphAnnotationSpec where
import Control.Monad (forM_)
import Data.Aeson (decode, encode, Value(..))
import Data.Aeson.QQ
import qualified Data.HashMap.Lazy as HM
import Test.Hspec
import Web.Mackerel.Types.GraphAnnotation
spec :: Spec
spec = do
let graphAnnotation = GraphAnnotation {
graphAnnotationId = Just $ GraphAnnotationId "abcde",
graphAnnotationTitle = "Deploy application #123",
graphAnnotationDescription = "Deploy link: https://example.com/123",
graphAnnotationFrom = 1485000000,
graphAnnotationTo = 1485000060,
graphAnnotationService = "ExampleService",
graphAnnotationRoles = Just [ "ExampleRole1", "ExampleRole2" ]
}
let json = [aesonQQ|
{
"id": "abcde",
"title": "Deploy application #123",
"description": "Deploy link: https://example.com/123",
"from": 1485000000,
"to": 1485000060,
"service": "ExampleService",
"roles": [ "ExampleRole1", "ExampleRole2" ]
}
|]
describe "GraphAnnotation FromJSON" $ do
it "should parse a json" $
decode (encode json) `shouldBe` Just graphAnnotation
it "should reject an invalid json" $ do
decode "{}" `shouldBe` (Nothing :: Maybe GraphAnnotation)
let (Object hm) = json
forM_ ["title", "description", "from", "to", "service"] $ \key ->
decode (encode (Object (HM.delete key hm))) `shouldBe` (Nothing :: Maybe GraphAnnotation)
describe "GraphAnnotation ToJSON" $
it "should encode into a json" $
decode (encode graphAnnotation) `shouldBe` Just json