purescript-pg/test/Test.Common.purs

57 lines
1.6 KiB
Haskell
Raw Normal View History

module Test.Common where
import Prelude
import Data.Either (Either(..))
import Data.String.Regex (Regex)
import Data.String.Regex as Regex
import Data.String.Regex.Flags (RegexFlags(..))
import Effect (Effect)
2024-04-01 18:46:33 +00:00
import Effect.Aff (Aff, bracket)
2024-03-31 01:38:52 +00:00
import Effect.Aff.Postgres.Client (Client)
import Effect.Aff.Postgres.Client as Client
import Effect.Aff.Postgres.Pool (Pool)
import Effect.Aff.Postgres.Pool as Pool
import Effect.Class (liftEffect)
2024-03-31 01:38:52 +00:00
import Effect.Unsafe (unsafePerformEffect)
import Node.Path as Path
import Node.Process (cwd)
import Partial.Unsafe (unsafePartial)
2024-04-01 18:46:33 +00:00
import Record (insert)
import Type.Prelude (Proxy(..))
type Config =
{ database :: String
, host :: String
, password :: String
, user :: String
, max :: Int
}
config :: Effect Config
config = do
cwd' <- liftEffect cwd
host <- liftEffect $ Path.resolve [ cwd' ] "./pg"
2024-04-01 18:46:33 +00:00
pure { host, user: "postgres", password: "password", database: "postgres", max: 3 }
withConfig :: (Config -> Aff Unit) -> Aff Unit
withConfig f = f =<< liftEffect config
withClient :: (Client -> Aff Unit) -> Aff Unit
2024-03-31 01:38:52 +00:00
withClient = bracket (Client.connected =<< liftEffect config) Client.end
pool :: Pool
pool = unsafePerformEffect $ Pool.make =<< liftEffect config
2024-04-01 18:46:33 +00:00
withPool :: (Pool -> Aff Unit) -> Aff Unit
withPool = bracket (liftEffect $ Pool.make =<< config) Pool.end
2024-03-31 01:38:52 +00:00
withPoolClient :: (Client -> Aff Unit) -> Aff Unit
2024-04-01 18:46:33 +00:00
withPoolClient = bracket (Pool.connect pool) (liftEffect <<< Pool.release pool)
unsafeFromRight :: forall a b. Either a b -> b
unsafeFromRight e = unsafePartial $ case e of Right b -> b
re :: String -> RegexFlags -> Regex
re s f = unsafeFromRight $ Regex.regex s f