opium/test/SpecHook.hs

36 lines
1.1 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
module SpecHook (hook) where
import Control.Exception (bracket)
import System.Environment (lookupEnv)
import Test.Hspec (Spec, SpecWith, around)
import Text.Printf (printf)
import qualified Data.Text as Text
import qualified Database.PostgreSQL.Opium as Opium
setupConnection :: IO Opium.Connection
setupConnection = do
Just dbUser <- lookupEnv "DB_USER"
Just dbPass <- lookupEnv "DB_PASS"
Just dbName <- lookupEnv "DB_NAME"
Just dbPort <- lookupEnv "DB_PORT"
let dsn = printf "host=localhost user=%s password=%s dbname=%s port=%s" dbUser dbPass dbName dbPort
Right conn <- Opium.connect $ Text.pack dsn
Right _ <- Opium.execute_ "DROP TABLE IF EXISTS person" conn
Right _ <- Opium.execute_ "CREATE TABLE person (name TEXT NOT NULL, age INT NOT NULL, score DOUBLE PRECISION NOT NULL, motto TEXT)" conn
Right _ <- Opium.execute_ "INSERT INTO person VALUES ('paul', 25, 30), ('albus', 103, 50.42)" conn
pure conn
teardownConnection :: Opium.Connection -> IO ()
teardownConnection conn = do
Opium.close conn
hook :: SpecWith Opium.Connection -> Spec
hook = around $ bracket setupConnection teardownConnection