{-# LANGUAGE OverloadedStrings, QuasiQuotes, TemplateHaskell #-} module Main (main) where import Network.AWS.CloudFront.SignedCookies -- base import Control.Monad (unless) import Data.Either (isLeft) import Data.Foldable (for_) import qualified System.Exit as Exit import qualified System.IO as IO -- hedgehog import Hedgehog import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range -- neat-interpolation import NeatInterpolation main :: IO () main = do for_ [IO.stdout, IO.stderr] $ \h -> do IO.hSetEncoding h IO.utf8 IO.hSetBuffering h IO.LineBuffering success <- Hedgehog.checkParallel $$(Hedgehog.discover) unless success Exit.exitFailure prop_jsonPolicy_1 :: Property prop_jsonPolicy_1 = withTests 1 $ property $ let x = [text| { "Statement": [ { "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": {"AWS:SourceIp": "192.0.2.0/24"}, "DateLessThan": {"AWS:EpochTime": 1357034400} } } ] } |] p = Policy (Resource "http://d111111abcdef8.cloudfront.net/game_download.zip") StartImmediately (EndTime 1357034400) (IpAddress "192.0.2.0/24") in jsonTextPolicy x === Right p prop_jsonPolicy_2 :: Property prop_jsonPolicy_2 = withTests 1 $ property $ let x = [text| { "Statement": [ { "Resource": "http://*", "Condition": { "IpAddress": {"AWS:SourceIp": "192.0.2.10/32"}, "DateGreaterThan": {"AWS:EpochTime": 1357034400}, "DateLessThan": {"AWS:EpochTime": 1357120800} } } ] } |] p = Policy (Resource "http://*") (StartTime 1357034400) (EndTime 1357120800) (IpAddress "192.0.2.10/32") in jsonTextPolicy x === Right p prop_jsonPolicy_3 :: Property prop_jsonPolicy_3 = withTests 1 $ property $ let x = [text| { "Statement": [ { "Resource": "http://*", "Condition": { "IpAddress": {"AWS:SourceIp": "192.0.2.10/32"}, "DateGreaterThan": |] in assert (isLeft (jsonTextPolicy x))