From 8a7a3b29a9413d634b8f8a71119cc54a6132df41 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Sat, 8 Aug 2020 14:47:39 +0100 Subject: Add tests for "exp" field of the JWT Assert that the exp field of the JWT is "fresh". --- .../sandbox/learnpianochords/src/server/Spec.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'website/sandbox/learnpianochords/src/server/Spec.hs') diff --git a/website/sandbox/learnpianochords/src/server/Spec.hs b/website/sandbox/learnpianochords/src/server/Spec.hs index 96f10a9c4332..097ae3d5158d 100644 --- a/website/sandbox/learnpianochords/src/server/Spec.hs +++ b/website/sandbox/learnpianochords/src/server/Spec.hs @@ -4,11 +4,13 @@ module Spec where -------------------------------------------------------------------------------- import Test.Hspec import Utils +import Web.JWT (numericDate) import GoogleSignIn (ValidationResult(..)) import qualified GoogleSignIn import qualified Fixtures as F import qualified TestUtils +import qualified Data.Time.Clock.POSIX as POSIX -------------------------------------------------------------------------------- main :: IO () @@ -44,3 +46,23 @@ main = hspec $ do encodedJWT = F.defaultJWTFields { F.overwriteIss = erroneousIssuer } |> F.googleJWT jwtIsValid' encodedJWT `shouldReturn` Valid + + it "fails validation when the exp field has expired" $ do + let mErroneousExp = numericDate 0 + case mErroneousExp of + Nothing -> True `shouldBe` False + Just erroneousExp -> do + let encodedJWT = F.defaultJWTFields { F.overwriteExp = erroneousExp } + |> F.googleJWT + jwtIsValid' encodedJWT `shouldReturn` StaleExpiry erroneousExp + + it "passes validation when the exp field is current" $ do + mFreshExp <- POSIX.getPOSIXTime + |> fmap (\x -> x * 60 * 60 * 24 * 10) -- 10 days later + |> fmap numericDate + case mFreshExp of + Nothing -> True `shouldBe` False + Just freshExp -> do + let encodedJWT = F.defaultJWTFields { F.overwriteExp = freshExp } + |> F.googleJWT + jwtIsValid' encodedJWT `shouldReturn` Valid -- cgit 1.4.1