packages feed

yesod-auth-simple-1.1.0: test/TestImport.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module TestImport
  ( module TestImport
  , module X
  ) where

import ClassyPrelude as X hiding (Handler, delete, deleteBy)
import Control.Monad.Logger (runLoggingT)
import Database.Persist as X hiding (get)
import Database.Persist.Sql
       (SqlPersistM, runMigration, runSqlPersistMPool, runSqlPool)
import Database.Persist.Sqlite (createSqlitePool)
import ExampleApp as X
import System.Directory
import System.Log.FastLogger (newStdoutLoggerSet)
import Test.Hspec as X
import Yesod hiding (get)
import Yesod.Auth.Simple as X
import Yesod.Core as X
import Yesod.Core.Unsafe (fakeHandlerGetLogger)
import Yesod.Default.Config2 (makeYesodLogger)
import Yesod.Test as X

withApp :: SpecWith (TestApp App) -> Spec
withApp = before $ do
  appLogger <- newStdoutLoggerSet 1 >>= makeYesodLogger

  let mkFoundation appConnPool = App {..}
      tempFoundation = mkFoundation $ error "connPool forced in tempFoundation"
      logFunc = messageLoggerSource tempFoundation appLogger

  removeIfExists "auth.sqlite3"
  pool <- flip runLoggingT logFunc $ createSqlitePool "auth.sqlite3" 10
  runLoggingT (runSqlPool (runMigration migrateAll) pool) logFunc
  pure (mkFoundation pool, defaultMiddlewaresNoLogging)

runHandler :: Handler a -> YesodExample App a
runHandler handler = do
  app <- getTestYesod
  fakeHandlerGetLogger appLogger app handler

runDB' :: SqlPersistM a -> YesodExample App a
runDB' query = do
  app <- getTestYesod
  liftIO $ runDBWithApp app query

runDBWithApp :: App -> SqlPersistM a -> IO a
runDBWithApp app query = runSqlPersistMPool query (appConnPool app)

removeIfExists :: FilePath -> IO ()
removeIfExists f = do
  fileExists <- doesFileExist f
  when fileExists (removeFile f)

-- | Follow a redirect and discard the result
followRedirect_ :: Yesod a => YesodExample a ()
followRedirect_ = void followRedirect