packages feed

password-1.0.0.0: test/tasty/Spec.hs

import Crypto.Scrypt (Salt(..))
import Data.Text.Encoding (encodeUtf8)
import Test.Tasty
import Test.Tasty.QuickCheck
import Test.QuickCheck.Instances.Text ()

import Data.Password

main :: IO ()
main = defaultMain $ testGroup "Password"
  [ testProperty "Pass" $ \pass ->
      unsafeShowPasswordText (mkPass pass) === pass
  , testProperty "Scrypt (hashPass)" $ \pass -> ioProperty $ do
      let pw = mkPass pass
      hpw <- hashPass pw
      return $ checkPass pw hpw === PassCheckSuccess
  , testProperty "Scrypt (hashPass) fail" $ \pass pass2 -> ioProperty $ do
      let pw = mkPass pass
          pw2 = mkPass pass2
          result = if pass == pass2 then PassCheckSuccess else PassCheckFail
      hpw <- hashPass pw
      return $ checkPass pw2 hpw === result
  , testProperty "Scrypt (hashPassWithSalt)" $ \pass salt ->
      let pw = mkPass pass
          hpw = hashPassWithSalt (Salt $ encodeUtf8 salt) pw
      in checkPass pw hpw === PassCheckSuccess
  ]