packages feed

wai-session-postgresql-0.2.0.3: test/Spec.hs

{-# LANGUAGE OverloadedStrings #-}
module Main where

import Control.Exception.Base (assert)
import Control.Monad
import Data.Default (def)
import Data.String (fromString)
import Database.PostgreSQL.Simple
import Network.Wai.Session (withSession, Session)
import Network.Wai.Session.PostgreSQL

import qualified Data.ByteString as B
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE

main :: IO ()
main = do
    conn <- dbconnect
    conn' <- fromSimpleConnection conn
    store <- dbStore conn' def
    purger conn' def

    ((lookupSess1, insertSess1), mknewsessid) <- store Nothing
    sessid <- mknewsessid

    insertSess1 ("foo" :: B.ByteString) ("bar" :: B.ByteString)

    l1 <- lookupSess1 "foo"
    assert (l1 == (Just "bar")) it

    l2 <- lookupSess1 "bar"
    assert (l2 == Nothing) it

    ((lookupSess2, insertSess2), mknewsessid) <- store $ Just sessid
    newsessid <- mknewsessid

    l3 <- lookupSess2 "foo"
    assert (l3 == (Just "bar")) it

    assert (newsessid == sessid) it

    let invalidsessid = "foobar"
    ((lookupSess3, insertSess3), mknewsessid) <- store $ Just invalidsessid
    newsessid2 <- mknewsessid

    assert (newsessid2 /= newsessid) it
    assert (newsessid2 /= invalidsessid) it

    l3 <- lookupSess3 "foo"
    assert (l3 == Nothing) it


it :: IO ()
it = return ()

dbconnect :: IO Connection
dbconnect = do
    let connectInfo = ConnectInfo {
          connectHost = "localhost"
        , connectPort = 5432
        , connectUser = "demo"
        , connectPassword = "omed"
        , connectDatabase = "demodb" }
    connectPostgreSQL $ postgreSQLConnectionString connectInfo