37 lines
1.2 KiB
Haskell
37 lines
1.2 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 Data.Text.Encoding as Encoding
|
|
|
|
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
|
|
conn <- Opium.connect $ Encoding.encodeUtf8 $ 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
|