packages feed

pg-store-0.0.1: tests/Main.hs

module Main (main) where

import           Test.Hspec

import           Control.Monad

import qualified Data.Text as T
import qualified Data.Text.Encoding as T

import           Database.PostgreSQL.Store.ColumnsSpec
import           Database.PostgreSQL.Store.TableSpec
import           Database.PostgreSQL.Store.QuerySpec
import qualified Database.PostgreSQL.LibPQ as P

import           System.Environment

-- | Test which will only be executed if 'PGINFO' environment variable is set
liveTests :: String -> Spec
liveTests pgInfo = do
	(con, status) <- runIO $ do
		con <- P.connectdb (T.encodeUtf8 (T.pack pgInfo))
		status <- P.status con
		pure (con, status)

	describe "Database connection" $
		it "must be established" $
			status `shouldBe` P.ConnectionOk

	when (status == P.ConnectionOk) (afterAll_ (P.finish con) (tableSpec con))

-- | Test entry point
main :: IO ()
main = hspec $ do
	columnsSpec
	querySpec

	mbPGInfo <- runIO (lookupEnv "PGINFO")
	case mbPGInfo of
		Just pgInfo -> liveTests pgInfo
		Nothing     -> runIO (putStrLn "Environment variable 'PGINFO' is missing")