Skip to content

Commit 4af7d91

Browse files
committed
migrated numdumpster
1 parent b07cf2d commit 4af7d91

4 files changed

Lines changed: 46 additions & 67 deletions

File tree

examples/Common.hs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,28 @@
11
module Common (
2-
TestEnv(..)
3-
, mkTest
2+
withDB
3+
, withRollback
44
, include
55
, bindOptions
66
) where
77

8-
import Test.HUnit
98
import Control.Exception.Base
109
import Text.CaseConversion
10+
import Test.Hspec
1111
import Database.PostgreSQL.Simple
1212
import Database.PostgreSQL.Simple.Bind (Options(..), defaultOptions)
1313
import Database.PostgreSQL.Simple.Types
1414
import qualified Data.ByteString.Char8 as BS
1515

16-
17-
data TestEnv = TestEnv {
18-
envConnectInfo :: ConnectInfo
19-
}
20-
2116
bindOptions :: Options
2217
bindOptions = defaultOptions {
2318
nameModifier = convertCase Snake Camel . ("sql_" ++)
2419
}
2520

26-
withConn :: ConnectInfo -> (Connection -> IO a) -> IO a
27-
withConn connectInfo = bracket (connect connectInfo) close
21+
withDB :: ConnectInfo -> (Connection -> IO a) -> IO a
22+
withDB connectInfo = bracket (connect connectInfo) close
2823

29-
mkTest :: (Connection -> IO ()) -> (Connection -> IO()) -> TestEnv -> Test
30-
mkTest setup run env = TestCase $ withConn (envConnectInfo env)
31-
(\conn -> mapM_ ($ conn) [begin, setup, run, rollback])
24+
withRollback :: (Connection -> IO ()) -> (Connection -> IO ())
25+
withRollback action = \conn -> mapM_ ($ conn) [begin, action, rollback]
3226

3327
include :: Connection -> String -> IO ()
3428
include conn fn = readFile fn >>= (execute_ conn . Query . BS.pack) >> return ()

examples/ExNumDumpster.hs

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,14 @@
1212

1313

1414
module ExNumDumpster (
15-
numDumpster
15+
specNumDumpster
1616
) where
1717

18-
import Test.HUnit
18+
import Test.Hspec
1919
import Database.PostgreSQL.Simple
20-
2120
import Database.PostgreSQL.Simple.Bind (bindFunction)
2221
import Database.PostgreSQL.Simple.Bind.Types()
23-
24-
import Common (bindOptions, TestEnv, mkTest, include)
22+
import Common
2523

2624

2725
concat <$> mapM (bindFunction bindOptions) [
@@ -47,24 +45,22 @@ iterFib conn = do
4745
addManyNums conn [x, x']
4846
return x'
4947

48+
specNumDumpster :: Connection -> Spec
49+
specNumDumpster conn = describe "NumDumpster example" $ it "works" $ do
50+
include conn "./examples/sql/numdumpster.sql"
5051

51-
numDumpster :: TestEnv -> Test
52-
numDumpster = mkTest (flip include "./examples/sql/numdumpster.sql")
53-
(\conn -> do
54-
sqlAddNum conn 1
55-
sqlGetLastNum conn >>= \x -> assertEqual "check get_last_num" 1 x
56-
57-
sqlClear conn
58-
addManyNums conn [1, 2, 3, 4]
59-
sqlGetAllNums conn >>= \xs -> assertEqual "check get_all_nums" [1, 2, 3, 4] xs
52+
sqlAddNum conn 1
53+
sqlGetLastNum conn >>= shouldBe 1
6054

61-
sqlGetRange conn Nothing Nothing >>= \xs -> assertEqual "check get_range" [1, 2, 3, 4] xs
62-
sqlGetRange conn (Just 2) (Just 3) >>= \xs -> assertEqual "check get_range" [2, 3] xs
63-
sqlGetRange conn Nothing (Just 3) >>= \xs -> assertEqual "check get_range" [1, 2, 3] xs
64-
sqlGetRange conn (Just 2) Nothing >>= \xs -> assertEqual "check get_range" [2, 3, 4] xs
55+
sqlClear conn
56+
addManyNums conn [1, 2, 3, 4]
57+
sqlGetAllNums conn >>= shouldBe [1, 2, 3, 4]
6558

66-
sqlClear conn
67-
addManyNums conn [0, 1]
68-
((head . reverse) <$> (sequence $ replicate 11 (iterFib conn))) >>=
69-
\x -> assertEqual "check 11th fibonacci number" 144 x)
59+
sqlGetRange conn Nothing Nothing >>= shouldBe [1, 2, 3, 4]
60+
sqlGetRange conn (Just 2) (Just 3) >>= shouldBe [2, 3]
61+
sqlGetRange conn Nothing (Just 3) >>= shouldBe [1, 2, 3]
62+
sqlGetRange conn (Just 2) Nothing >>= shouldBe [2, 3, 4]
7063

64+
sqlClear conn
65+
addManyNums conn [0, 1]
66+
((head . reverse) <$> (sequence $ replicate 11 (iterFib conn))) >>= shouldBe 144

examples/Main.hs

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,27 @@
1-
{-# LANGUAGE NamedFieldPuns #-}
1+
{-# LANGUAGE OverloadedStrings #-}
2+
{-# LANGUAGE NamedFieldPuns #-}
23

3-
import Test.HUnit
4-
import Control.Monad
5-
import System.IO
6-
import System.Exit
4+
import Test.Hspec
5+
import Database.PostgreSQL.Simple.Bind.Representation
6+
import Data.Text ()
77
import Database.PostgreSQL.Simple
8-
9-
import Common (TestEnv(..))
8+
import Common
109
import ExNumDumpster
11-
import ExUsers
12-
import ExMessages
13-
14-
testEnv :: TestEnv
15-
testEnv = TestEnv {
16-
envConnectInfo = ConnectInfo {
17-
connectHost = "localhost"
18-
, connectPort = 5432
19-
, connectDatabase = "test_db"
20-
, connectUser = "test_role"
21-
, connectPassword = "TEST"
22-
}
23-
}
10+
-- import ExUsers
11+
-- import ExMessages
2412

25-
tests :: [TestEnv -> Test]
26-
tests = [
27-
TestLabel "NumDumpster" . numDumpster
28-
, TestLabel "Users" . users
29-
, TestLabel "Messages" . messages
30-
]
13+
connectInfo :: ConnectInfo
14+
connectInfo = ConnectInfo {
15+
connectHost = "localhost"
16+
, connectPort = 5432
17+
, connectDatabase = "test_db"
18+
, connectUser = "test_role"
19+
, connectPassword = "TEST"
20+
}
3121

3222
main :: IO ()
33-
main = do
34-
mapM_ (`hSetBuffering` LineBuffering) [stdout, stderr]
35-
36-
Counts {cases, tried, errors, failures} <- runTestTT $ TestList $ map ($ testEnv) tests
37-
when (cases /= tried || errors /= 0 || failures /= 0) $ exitFailure
23+
main = withDB connectInfo $ withRollback $ hspec . spec
3824

25+
spec :: Connection -> Spec
26+
spec conn = do
27+
specNumDumpster conn

postgresql-simple-bind.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ test-suite examples
8484
, attoparsec >= 0.13.0 && < 0.14
8585
, bytestring >= 0.10.8 && < 0.11
8686
, case-conversion
87-
, HUnit
87+
, hspec
8888
, postgresql-simple >= 0.5.2 && < 0.6
8989
, postgresql-simple-bind
9090
, text >= 1.2.2 && < 1.3

0 commit comments

Comments
 (0)