packages feed

hasql-url-0.1.0.0: test/Spec.hs

{-# LANGUAGE OverloadedStrings #-}

import Hasql.Connection (Settings, settings)
import Hasql.URL
import Test.Tasty
import Test.Tasty.QuickCheck as QC

main :: IO ()
main = defaultMain caseProps

cases :: [(String, Maybe Settings)]
cases =
  [ ("postgres://username:password@domain.com:5433/database", Just $ settings "domain.com" 5433 "username" "password" "database"),
    ("postgresql://username:password@domain.com:5433/database", Just $ settings "domain.com" 5433 "username" "password" "database"),
    ("postgres://localhost:5432/database", Just $ settings "localhost" 5432 "postgres" "" "database"),
    ("postgres://username@localhost/database", Just $ settings "localhost" 5432 "username" "" "database"),
    ("postgres://localhost/database", Just $ settings "localhost" 5432 "postgres" "" "database"),
    ("postgres:///database", Just $ settings "" 5432 "postgres" "" "database"),
    ("postgres://", Nothing)
  ]

caseProps :: TestTree
caseProps = testGroup "Run test cases" $ map f cases
  where
    f (url, expected) = QC.testProperty url $ once $ property $ expected == parseDatabaseUrl url