{-# LANGUAGE CPP, OverloadedStrings #-} import Control.Exception (bracket) import Data.Text (Text) import Database.MySQL.Simple import Database.MySQL.Simple.Param import Test.Hspec import Blaze.ByteString.Builder (toByteString) #if MIN_VERSION_base(4,8,2) #else import Control.Applicative import Data.Monoid #endif -- This is how to connect to our test database testConn :: ConnectInfo testConn = defaultConnectInfo { connectHost = "127.0.0.1", connectUser = "test", connectDatabase = "test" } main :: IO () main = bracket (connect testConn) close $ \conn -> hspec $ do unitSpec integrationSpec conn unitSpec :: Spec unitSpec = do describe "Param a => Param (In [a]) instance" $ do it "renders an empty list correctly" $ do let empty :: [Text] empty = mempty case render (In empty) of Plain a -> toByteString a `shouldBe` "(null)" _ -> expectationFailure "expected a Plain" it "renders a non-empty list correctly" $ do let l :: [Text] l = ["foo", "bar"] case render (In l) of Many [Plain _, Escape "foo", Plain _, Escape "bar", Plain _] -> pure () _ -> expectationFailure "expected a Many with specific contents" integrationSpec :: Connection -> Spec integrationSpec conn = do describe "the library" $ do it "can connect to a database" $ do result <- query_ conn "select 1 + 1" result `shouldBe` [Only (2::Int)]