{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeApplications #-} import Database.Esqueleto.Experimental import qualified Database.Esqueleto.PostgreSQL.Pgcrypto as PGC import Model import Test.Hspec import Utils main :: IO () main = hspec spec spec :: Spec spec = beforeAll mkConnectionPool $ do testCrypt testCrypt :: SpecDb testCrypt = describe "Crypt password hashing functions" $ do itDb "authenticates a user" $ do rawExecute "CREATE EXTENSION IF NOT EXISTS pgcrypto" [] _ <- insertSelect $ do pure $ User <# val "name" <&> PGC.toCrypt (PGC.BF $ Just 6) "1234password" authenticated <- select $ do user' <- from $ table @User where_ $ user' ^. UserUsername ==. val "name" &&. PGC.fromCrypt (user' ^. UserPasswordHash) "1234password" pure user' let authUser = entityVal $ head authenticated asserting $ do userUsername authUser `shouldBe` "name" userPasswordHash authUser `shouldNotBe` "1234password"