packages feed

hasql-1.9.3.1: hspec/Hasql/ConnectionSpec.hs

module Hasql.ConnectionSpec (spec) where

import Hasql.Connection qualified
import Hasql.Connection.Setting qualified
import Hasql.Connection.Setting.Connection qualified
import Hasql.Connection.Setting.Connection.Param qualified
import Test.Hspec
import TestcontainersPostgresql qualified
import Prelude

spec :: Spec
spec = do
  describe "acquire" do
    let itConnects :: Text -> Text -> Spec
        itConnects username password =
          describe ("username: " <> toList username) do
            describe ("password: " <> toList password) do
              it "connects" do
                TestcontainersPostgresql.run
                  ( TestcontainersPostgresql.Config
                      { forwardLogs = False,
                        distro = TestcontainersPostgresql.Distro17,
                        auth = TestcontainersPostgresql.CredentialsAuth username password
                      }
                  )
                  ( \(host, port) -> do
                      result <-
                        Hasql.Connection.acquire
                          [ Hasql.Connection.Setting.connection
                              ( Hasql.Connection.Setting.Connection.params
                                  [ Hasql.Connection.Setting.Connection.Param.host host,
                                    Hasql.Connection.Setting.Connection.Param.port (fromIntegral port),
                                    Hasql.Connection.Setting.Connection.Param.user username,
                                    Hasql.Connection.Setting.Connection.Param.password password
                                  ]
                              )
                          ]
                      case result of
                        Left err -> expectationFailure ("Connection failed: " <> show err <> ". Host: " <> show host <> ", port: " <> show port)
                        Right connection -> do
                          Hasql.Connection.release connection
                          pure ()
                  )
     in do
          itConnects "user" "new password"
          itConnects "user" "new\\password"
          itConnects "user" "new'password"
          itConnects "new user" "password"