packages feed

botan-low-0.1.0.0: test/Test/Botan/Low/TOTP.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.Botan.Low.TOTP (tests) where

import           Botan.Low.TOTP
import           Data.ByteString
import           Test.Hspec
import           Test.Tasty
import           Test.Tasty.Hspec
import           Test.Util.ByteString
import           Test.Util.Hspec

tests :: IO TestTree
tests = do
    specs <- testSpec "spec_totp" spec_totp
    pure $ testGroup "Test.Botan.Low.TOTP" [
        specs
      ]

key :: ByteString
key = "Fee fi fo fum"

timestep :: TOTPTimestep
timestep = 60

timestamp :: TOTPTimestamp
timestamp = 1698109812

-- TODO: More thorough testing
spec_totp :: Spec
spec_totp = testSuite totpHashes chars $ \ h -> do
    it "totpInit" $ do
        _ctx <- totpInit key h 6 timestep
        pass
    it "totpGenerate" $ do
        ctx <- totpInit key h 6 timestep
        _code <- totpGenerate ctx timestamp
        pass
    it "totpCheck" $ do
        ctx <- totpInit key h 6 timestep
        code <- totpGenerate ctx timestamp
        success <- totpCheck ctx code timestamp 0
        success `shouldBe` True