gamgee-1.0.0: test/Gamgee/Test/Golden.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Gamgee.Test.Golden
( goldenTests
) where
import qualified Crypto.Random as CR
import qualified Gamgee.Test.Operation as Op
import qualified Gamgee.Token as Token
import Relude
import System.FilePath ((</>))
import qualified Test.Tasty as T
import qualified Test.Tasty.Golden as T
goldenTests :: T.TestTree
goldenTests = T.testGroup "Golden Tests" [ getOTPTest ]
goldenTest :: Show a => T.TestName -> IO a -> T.TestTree
goldenTest name action = T.goldenVsString name (goldenDir </> name ++ ".txt") (encodeUtf8 @String . show <$> action)
where
goldenDir = "test" </> "data" </> "golden"
----------------------------------------------------------------------------------------------------
-- getOTP tests
----------------------------------------------------------------------------------------------------
getOTPTest :: T.TestTree
getOTPTest = goldenTest "getOTPTest" $ do
drg <- CR.getSystemDRG
return $ Op.runTest Nothing $ \cfg -> do
let spec = Token.TokenSpec {
Token.tokenType = Token.TOTP
, Token.tokenLabel = "test"
, Token.tokenSecret = Token.TokenSecretPlainText "K5RHSRDNJZRSCTDHKM4VSYLN"
, Token.tokenIssuer = Token.TokenIssuer ""
, Token.tokenAlgorithm = Token.AlgorithmSHA1
, Token.tokenDigits = Token.Digits6
, Token.tokenPeriod = Token.TokenPeriod 30 }
Right () <- Op.addToken drg cfg ["nicepassword"] spec
mapM (Op.getOTP drg cfg ["nicepassword"] (Token.getIdentifier spec) . fromInteger) [312 + i*30 | i <- [0..4]]