Skip to content

Commit a2516b5

Browse files
committed
migrated the rest of examples
1 parent 4af7d91 commit a2516b5

5 files changed

Lines changed: 58 additions & 73 deletions

File tree

examples/Common.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ module Common (
55
, bindOptions
66
) where
77

8-
import Control.Exception.Base
9-
import Text.CaseConversion
10-
import Test.Hspec
11-
import Database.PostgreSQL.Simple
8+
import Control.Exception.Base (bracket)
9+
import Database.PostgreSQL.Simple (Connection, ConnectInfo, connect, begin, rollback, close, execute_)
1210
import Database.PostgreSQL.Simple.Bind (Options(..), defaultOptions)
13-
import Database.PostgreSQL.Simple.Types
11+
import Database.PostgreSQL.Simple.Types (Query(..))
12+
import Text.CaseConversion (convertCase, WordCase(..))
1413
import qualified Data.ByteString.Char8 as BS
1514

1615
bindOptions :: Options

examples/ExMessages.hs

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414

1515

1616
module ExMessages (
17-
messages
17+
specMessages
1818
) where
1919

20-
import Test.HUnit
20+
import Common (bindOptions, include)
21+
import Database.PostgreSQL.Simple (Connection)
2122
import Database.PostgreSQL.Simple.Bind (bindFunction)
2223
import Database.PostgreSQL.Simple.Bind.Types()
23-
import Database.PostgreSQL.Simple (Connection)
2424
import Prelude hiding (getContents)
25-
import Common (bindOptions, TestEnv, mkTest, include)
25+
import Test.Hspec (Spec, describe, it, shouldBe)
2626

2727
concat <$> mapM (bindFunction bindOptions) [
2828
"function send_message(p_receiver varchar, p_contents varchar) returns bigint"
@@ -31,35 +31,28 @@ concat <$> mapM (bindFunction bindOptions) [
3131
]
3232

3333

34-
runTests :: Int -> Connection -> IO ()
35-
runTests n conn = do
36-
let getId (x, _, _) = x
37-
38-
msg1 <- sqlSendMessage conn "mr_foo" "hello!"
39-
msg2 <- sqlSendMessage conn "mr_bar" "hello!"
40-
msg3 <- sqlSendMessage conn "mr_bar" "hello again!"
41-
42-
sqlGetNewMessages conn "mr_foo" >>= \xs ->
43-
assertEqual ("check get_new_messages " ++ (show n) ++ ".1") [msg1] (map getId xs)
34+
specMessages :: Connection -> Spec
35+
specMessages conn = describe "Messages example" $ it "works" $ mapM_ runTests [
36+
"./examples/sql/messages.sql"
37+
, "./examples/sql/messages-patch-1.sql"
38+
, "./examples/sql/messages-patch-2.sql"
39+
] where
4440

45-
sqlGetNewMessages conn "mr_bar" >>= \xs ->
46-
assertEqual ("check get_new_messages " ++ (show n) ++ ".2") [msg2, msg3] (map getId xs)
41+
getId (x, _, _) = x
4742

48-
sqlMarkAsRead conn "mr_bar" msg2
43+
runTests fn = do
44+
include conn fn
4945

50-
sqlGetNewMessages conn "mr_bar" >>= \xs ->
51-
assertEqual ("check get_new_messages " ++ (show n) ++ ".3") [msg3] (map getId xs)
46+
msg1 <- sqlSendMessage conn "mr_foo" "hello!"
47+
msg2 <- sqlSendMessage conn "mr_bar" "hello!"
48+
msg3 <- sqlSendMessage conn "mr_bar" "hello again!"
5249

53-
sqlMarkAsRead conn "mr_foo" msg1
54-
sqlMarkAsRead conn "mr_bar" msg3
50+
sqlGetNewMessages conn "mr_foo" >>= shouldBe [msg1] . map getId
51+
sqlGetNewMessages conn "mr_bar" >>= shouldBe [msg2, msg3] . map getId
5552

53+
sqlMarkAsRead conn "mr_bar" msg2
5654

57-
messages :: TestEnv -> Test
58-
messages = mkTest (flip include "./examples/sql/messages.sql")
59-
(\conn -> do
60-
runTests 1 conn
61-
include conn "./examples/sql/messages-patch-1.sql"
62-
runTests 2 conn
63-
include conn "./examples/sql/messages-patch-2.sql"
64-
runTests 3 conn)
55+
sqlGetNewMessages conn "mr_bar" >>= shouldBe [msg3] . map getId
6556

57+
sqlMarkAsRead conn "mr_foo" msg1
58+
sqlMarkAsRead conn "mr_bar" msg3

examples/ExNumDumpster.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ module ExNumDumpster (
1515
specNumDumpster
1616
) where
1717

18-
import Test.Hspec
19-
import Database.PostgreSQL.Simple
18+
import Common (bindOptions, include)
19+
import Database.PostgreSQL.Simple (Connection)
2020
import Database.PostgreSQL.Simple.Bind (bindFunction)
2121
import Database.PostgreSQL.Simple.Bind.Types()
22-
import Common
22+
import Test.Hspec (Spec, describe, it, shouldBe)
2323

2424

2525
concat <$> mapM (bindFunction bindOptions) [
@@ -32,7 +32,7 @@ concat <$> mapM (bindFunction bindOptions) [
3232

3333

3434
addManyNums :: Connection -> [Int] -> IO ()
35-
addManyNums conn xs = sequence_ $ map (sqlAddNum conn) xs
35+
addManyNums conn xs = mapM_ (sqlAddNum conn) xs
3636

3737
getSum :: Connection -> IO Int
3838
getSum conn = sum <$> (sqlGetAllNums conn)

examples/ExUsers.hs

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,17 @@
1212

1313

1414
module ExUsers (
15-
users
15+
specUsers
1616
) where
1717

18-
import Test.HUnit
19-
import Database.PostgreSQL.Simple.Bind (bindFunction, PostgresType)
20-
import Database.PostgreSQL.Simple.Bind.Types()
21-
18+
import Common (bindOptions, include)
2219
import Data.Attoparsec.ByteString.Char8 (parseOnly, decimal, char, notChar, many')
23-
import Database.PostgreSQL.Simple.FromField
24-
2520
import Data.Text (Text)
26-
import Common (bindOptions, TestEnv, mkTest, include)
27-
21+
import Database.PostgreSQL.Simple (Connection)
22+
import Database.PostgreSQL.Simple.Bind (bindFunction, PostgresType)
23+
import Database.PostgreSQL.Simple.Bind.Types()
24+
import Database.PostgreSQL.Simple.FromField (FromField(..), ResultError(..), typename, returnError)
25+
import Test.Hspec (Spec, describe, it, shouldBe)
2826

2927
concat <$> mapM (bindFunction bindOptions) [
3028
"function get_users(p_filter varchar2 default '') returns setof t_user"
@@ -64,21 +62,17 @@ instance FromField User where
6462
return $ User { userId = userId', userName = userName', userAge = userAge' }
6563

6664

67-
users :: TestEnv -> Test
68-
users = mkTest (flip include "./examples/sql/users.sql")
69-
(\conn -> do
70-
mrFooId <- sqlAddUser conn "Mr. Foo" 42
71-
mrBarId <- sqlAddUser conn "Mr. Bar" 53
72-
mrBazId <- sqlAddUser conn "Mr. Baz" 64
73-
74-
sqlGetUsers conn Nothing >>=
75-
\xs -> assertEqual "check get_users" [mrFooId, mrBarId, mrBazId] (map userId xs)
65+
specUsers :: Connection -> Spec
66+
specUsers conn = describe "Users example" $ it "works" $ do
67+
include conn "./examples/sql/users.sql"
7668

77-
sqlGetUsers conn (Just "Mr. Ba_") >>=
78-
\xs -> assertEqual "check get_users 2" [mrBarId, mrBazId] (map userId xs)
69+
mrFooId <- sqlAddUser conn "Mr. Foo" 42
70+
mrBarId <- sqlAddUser conn "Mr. Bar" 53
71+
mrBazId <- sqlAddUser conn "Mr. Baz" 64
7972

80-
sqlDelUser conn mrBarId
73+
sqlGetUsers conn Nothing >>= shouldBe [mrFooId, mrBarId, mrBazId] . map userId
74+
sqlGetUsers conn (Just "Mr. Ba_") >>= shouldBe [mrBarId, mrBazId] . map userId
75+
sqlDelUser conn mrBarId
8176

82-
sqlGetUsers conn Nothing >>=
83-
\xs -> assertEqual "check get_users 3" [mrFooId, mrBazId] (map userId xs))
77+
sqlGetUsers conn Nothing >>= shouldBe [mrFooId, mrBazId] . map userId
8478

examples/Main.hs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
{-# LANGUAGE OverloadedStrings #-}
2-
{-# LANGUAGE NamedFieldPuns #-}
3-
4-
import Test.Hspec
5-
import Database.PostgreSQL.Simple.Bind.Representation
1+
import Common (withDB, withRollback)
62
import Data.Text ()
7-
import Database.PostgreSQL.Simple
8-
import Common
9-
import ExNumDumpster
10-
-- import ExUsers
11-
-- import ExMessages
3+
import Database.PostgreSQL.Simple (Connection, ConnectInfo(..))
4+
import ExMessages (specMessages)
5+
import ExNumDumpster (specNumDumpster)
6+
import ExUsers (specUsers)
7+
import Test.Hspec (Spec, hspec)
128

139
connectInfo :: ConnectInfo
1410
connectInfo = ConnectInfo {
@@ -23,5 +19,8 @@ main :: IO ()
2319
main = withDB connectInfo $ withRollback $ hspec . spec
2420

2521
spec :: Connection -> Spec
26-
spec conn = do
27-
specNumDumpster conn
22+
spec conn = mapM_ ($ conn) [
23+
specNumDumpster
24+
, specUsers
25+
, specMessages
26+
]

0 commit comments

Comments
 (0)