asap-0.0.1: test/Main.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad (unless)
import Data.Time
import Hedgehog
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
import System.Exit (exitFailure)
import System.IO (BufferMode (..), hSetBuffering, stderr, stdout)
import qualified Web.JWT as JWT
import Web.JWT.ASAP
nominalYear :: NominalDiffTime
nominalYear =
nominalDay * 365
nominalDecade :: NominalDiffTime
nominalDecade =
nominalYear * 10
genInDecade :: Gen NominalDiffTime
genInDecade =
Gen.realFrac_ (Range.constant 0 nominalDecade)
genMaxAge :: Gen MaxAge
genMaxAge =
MaxAge <$> Gen.realFrac_ (Range.constant 0 (9 * 60))
isExpiredProp :: Property
isExpiredProp =
property $ do
maxAge@(MaxAge maxAgeTime) <- forAll genMaxAge
iat <- forAll genInDecade
-- numericDate rounds so we have to + 1 to make a later time
assert $ maybe False (\iat' -> laterThanMaxAge maxAge iat' (iat + maxAgeTime + 1)) (JWT.numericDate iat)
main :: IO ()
main = do
hSetBuffering stdout LineBuffering
hSetBuffering stderr LineBuffering
results <- checkParallel $
Group "ASAP" [ ("laterThanMaxAge", isExpiredProp)
]
unless results exitFailure