hal-0.4.10: test/AWS/Lambda/Events/EventBridge/Spec.hs
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE QuasiQuotes #-}
module AWS.Lambda.Events.EventBridge.Spec where
import Prelude hiding (id)
import AWS.Lambda.Events.EventBridge
import qualified AWS.Lambda.Events.EventBridge.Gen as EventBridge
import qualified AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange.Gen as ParameterStoreChange
import Data.Aeson (decode, eitherDecode, encode,
object, (.=), Value(..))
import Data.ByteString.Lazy (ByteString)
import Data.Time (UTCTime(..), fromGregorian,
secondsToDiffTime)
import Hedgehog (forAll, tripping)
import Test.Hspec (Spec, describe, shouldBe, specify)
import Test.Hspec.Hedgehog (hedgehog)
import Test.Hspec.Runner (hspec)
import Text.RawString.QQ (r)
spec :: Spec
spec = do
describe "EventBridge" $ do
specify "read sample payload" $
eitherDecode samplePayload `shouldBe` Right expectedPayload
describe "properties" $ do
specify "EventBridgeEvent tripping" $
hedgehog $ do
payload <- forAll EventBridge.eventBridgeEvent
tripping payload encode decode
describe "SSM" $
specify "ParameterStoreChange tripping" $
hedgehog $ do
change <- forAll ParameterStoreChange.parameterStoreChange
tripping change encode decode
samplePayload :: ByteString
samplePayload = [r|
{
"version":"0",
"id":"01234567-0123-0123-0123-0123456789ab",
"detail-type":"Maintenance Window Target Registration Notification",
"source":"aws.ssm",
"account":"123456789012",
"time":"2016-11-16T00:58:37Z",
"region":"us-east-2",
"resources":[
"arn:aws:ssm:us-east-2:123456789012:maintenancewindow/mw-0ed7251d3fcf6e0c2",
"arn:aws:ssm:us-east-2:123456789012:windowtarget/e7265f13-3cc5-4f2f-97a9-7d3ca86c32a6"
],
"detail":{
"window-target-id":"e7265f13-3cc5-4f2f-97a9-7d3ca86c32a6",
"window-id":"mw-0ed7251d3fcf6e0c2",
"status":"REGISTERED"
}
}
|]
expectedPayload :: EventBridgeEvent
expectedPayload = EventBridgeEvent
{ version = "0"
, id = "01234567-0123-0123-0123-0123456789ab"
, detailType = "Maintenance Window Target Registration Notification"
, source = "aws.ssm"
, account = "123456789012"
, time = UTCTime (fromGregorian 2016 11 16) (secondsToDiffTime $ 58 * 60 + 37)
, region = "us-east-2"
, resources =
[ "arn:aws:ssm:us-east-2:123456789012:maintenancewindow/mw-0ed7251d3fcf6e0c2"
, "arn:aws:ssm:us-east-2:123456789012:windowtarget/e7265f13-3cc5-4f2f-97a9-7d3ca86c32a6"
]
, detail = object
[ "window-target-id" .= String "e7265f13-3cc5-4f2f-97a9-7d3ca86c32a6"
, "window-id" .= String "mw-0ed7251d3fcf6e0c2"
, "status" .= String "REGISTERED"
]
}