diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/dbcleaner.cabal b/dbcleaner.cabal
--- a/dbcleaner.cabal
+++ b/dbcleaner.cabal
@@ -1,5 +1,5 @@
 name:           dbcleaner
-version:        0.1.1
+version:        0.1.2
 synopsis:       Clean database tables automatically around hspec tests
 description:    A simple database cleaner library for testing that provides
                 different cleanup strategies.
@@ -14,7 +14,7 @@
 library
   exposed-modules:     Database.DBCleaner.PostgreSQLSimple
                      , Database.DBCleaner.Types
-  build-depends:       base >=4.4 && <4.9
+  build-depends:       base >=4.4 && <4.10
                      , postgresql-simple
                      , text
   hs-source-dirs:      src
@@ -22,6 +22,9 @@
 
 test-suite spec
   type:                exitcode-stdio-1.0
+  other-modules:       Database.DBCleaner.PostgreSQLSimple
+                     , Database.DBCleaner.PostgreSQLSimpleSpec
+                     , Database.DBCleaner.Types
   build-depends:       base
                      , hspec
                      , postgresql-simple
diff --git a/test/Database/DBCleaner/PostgreSQLSimpleSpec.hs b/test/Database/DBCleaner/PostgreSQLSimpleSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Database/DBCleaner/PostgreSQLSimpleSpec.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards   #-}
+
+module Database.DBCleaner.PostgreSQLSimpleSpec where
+
+import           Control.Applicative                 ((<$>), (<*>))
+import           Control.Monad                       (void)
+import           Data.Text                           (Text)
+import           Database.PostgreSQL.Simple          (Connection,
+                                                      connectPostgreSQL,
+                                                      execute, query_)
+import           Database.PostgreSQL.Simple.FromRow
+import           Database.PostgreSQL.Simple.ToField
+import           Database.PostgreSQL.Simple.ToRow
+import           Test.Hspec
+
+import           Database.DBCleaner.PostgreSQLSimple (withConnection)
+import           Database.DBCleaner.Types            (Strategy (..))
+
+data User = User
+  { userName  :: Text
+  , userEmail :: Text
+  } deriving (Show, Eq)
+
+instance FromRow User where
+  fromRow = User <$> field
+                 <*> field
+
+instance ToRow User where
+  toRow User{..} = [ toField userName
+                   , toField userEmail
+                   ]
+
+withTestConnection :: Strategy -> (Connection -> IO a) -> IO a
+withTestConnection s f = connectPostgreSQL "dbname=dbcleaner" >>= withConnection s f
+
+createUser :: Connection -> User -> IO ()
+createUser c = void . execute c "INSERT INTO users (name, email) VALUES (?, ?)"
+
+listUsers :: Connection -> IO [User]
+listUsers c = query_ c "SELECT name, email FROM users"
+
+spec :: Spec
+spec =
+  describe "withPGConnection" $ do
+    context "when strategy is Transaction" $
+      it "deletes all records create inside the transaction" $ do
+        withTestConnection Transaction $ \c -> do
+          let user1 = User "user1" "user1@example.com"
+              user2 = User "user2" "user2@example.com"
+          mapM_ (createUser c) [user1, user2]
+          listUsers c >>= shouldMatchList [user1, user2]
+
+        withTestConnection Transaction listUsers `shouldReturn` []
+
+    context "when strategy is Truncation" $
+      it "truncates all the tables of the schema" $ do
+        withTestConnection Truncation $ \c -> do
+          let user1 = User "user1" "user1@example.com"
+              user2 = User "user2" "user2@example.com"
+          mapM_ (createUser c) [user1, user2]
+          listUsers c >>= shouldMatchList [user1, user2]
+
+        withTestConnection Truncation listUsers `shouldReturn` []
