packages feed

postgres-options-0.2.0.0: test/Spec.hs

{-# LANGUAGE OverloadedStrings, CPP #-}
import Test.Hspec
import Database.PostgreSQL.Simple.Options

main :: IO ()
main = hspec $ describe "connection string parser" $ do
  it "fails on empty" $ parseConnectionString "" `shouldBe` Left "MalformedScheme NonAlphaLeading"

  it "parses a single keyword" $ parseConnectionString "host=localhost"
    `shouldBe` Right (mempty { host = return "localhost" })

  it "parses all keywords" $ parseConnectionString
    "host=localhost port=1234 user=jonathan password=open dbname=dev" `shouldBe`
      Right (mempty
        { host = return "localhost"
        , port = return 1234
        , user = return "jonathan"
        , password = return "open"
        , dbname = return "dev"
        })

  it "parses host only connection string" $ parseConnectionString "postgresql://localhost"
    `shouldBe` Right (mempty { host = return "localhost" })

  it "parses all params" $ parseConnectionString "postgresql://jonathan:open@localhost:1234/dev"
    `shouldBe` Right (mempty
        { host = return "localhost"
        , port = return 1234
        , user = return "jonathan"
        , password = return "open"
        , dbname = return "dev"
        })

  it "parses all params using query params" $ parseConnectionString "postgresql:///dev?host=localhost&port=1234"
    `shouldBe` Right (mempty
      { host = return "localhost"
      , port = return 1234
      , dbname = return "dev"
      })

  it "decodes a unix port" $ parseConnectionString "postgresql://%2Fvar%2Flib%2Fpostgresql/dbname"
    `shouldBe` Right (mempty
        { host = return "/var/lib/postgresql"
        , dbname = return "dbname"
        })