packages feed

serversession-backend-persistent-1.0: tests/Main.hs

module Main (main) where

import Control.Monad (forM_)
import Control.Monad.Logger (runStderrLoggingT, runNoLoggingT)
import Data.Pool (destroyAllResources)
import Data.Proxy (Proxy(..))
import Database.Persist.Postgresql (createPostgresqlPool)
import Database.Persist.Sqlite (createSqlitePool)
import Test.Hspec
import Web.ServerSession.Backend.Persistent
import Web.ServerSession.Core (SessionMap)
import Web.ServerSession.Core.StorageTests

import qualified Control.Exception as E
import qualified Database.Persist.TH as P
import qualified Database.Persist.Sql as P

P.mkMigrate "migrateAll" (serverSessionDefs (Proxy :: Proxy SessionMap))

main :: IO ()
main = hspec $
  forM_ [ ("PostgreSQL", createPostgresqlPool "user=test dbname=test password=test" 20)
        , ("SQLite",     createSqlitePool "test.db" 1) ] $
    \(rdbms, createPool) ->
  describe ("SqlStorage on " ++ rdbms) $ do
    epool <-
      runIO $ E.try $ do
        pool <- runNoLoggingT createPool
        runStderrLoggingT $ P.runSqlPool (P.runMigration migrateAll) pool
        return pool
    case epool of
      Left (E.SomeException exc) ->
        it "failed to create connection or migrate database" $
          pendingWith (show exc)
      Right pool ->
        afterAll_ (destroyAllResources pool) $
          allStorageTests (SqlStorage pool) it runIO parallel shouldBe shouldReturn shouldThrow