hal-0.4.10: test/AWS/Lambda/Events/EventBridge/Gen.hs
{-# LANGUAGE ApplicativeDo #-}
{-# LANGUAGE NamedFieldPuns #-}
module AWS.Lambda.Events.EventBridge.Gen where
import AWS.Lambda.Events.EventBridge (EventBridgeEvent'(..),
EventBridgeEvent)
import Data.List (intersperse)
import Data.Text (Text)
import qualified Data.Text as T
import Data.Time (UTCTime)
import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
import Data.Traversable (for)
import Hedgehog (Gen)
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
import Prelude hiding (id)
eventBridgeEvent :: Gen EventBridgeEvent
eventBridgeEvent = do
let version = "0"
id <- uuid
detailType <- Gen.text (Range.linear 1 200) Gen.unicode
source <- Gen.text (Range.linear 1 200) Gen.unicode
account <- awsAccount
time <- utcTime
region <- awsRegion
resources <- Gen.list (Range.linear 1 5) resource
let detail = "{}"
pure EventBridgeEvent
{ version
, id
, detailType
, source
, account
, time
, region
, resources
, detail
}
uuid :: Gen Text
uuid = do
uuidParts <- for [ 7, 4, 4, 4, 12, 2 ] $ \n ->
Gen.text (Range.singleton n) Gen.hexit
pure $ T.intercalate "-" uuidParts
utcTime :: Gen UTCTime
utcTime = do
int <- Gen.int64
(Range.exponentialFrom 1600000000000 1650000000000 1700000000000)
let (seconds, millis) = int `divMod` 1000
posixSeconds = fromIntegral seconds + fromIntegral millis / 1000
pure $ posixSecondsToUTCTime posixSeconds
awsAccount :: Gen Text
awsAccount = Gen.text (Range.singleton 12) Gen.digit
awsRegion :: Gen Text
awsRegion = Gen.element ["ap-south-1", "us-east-2", "eu-west-3"]
resource :: Gen Text
resource = do
acc <- awsAccount
svc <- Gen.text (Range.linear 1 10) Gen.lower
reg <- awsRegion
res <- Gen.text (Range.linear 1 20) Gen.alphaNum
pure $ T.intercalate ":" ["arn:aws", svc, reg, acc, res]