-- Adapted from https://github.com/hce/postgresql-session/blob/master/test/Spec.hs {-# LANGUAGE OverloadedStrings #-} module Main where import Control.Concurrent import qualified Data.ByteString as B import Data.Default import Test.Hspec import Network.Wai.Session.Redis main :: IO () main = hspec spec spec :: Spec spec = describe "Network.Wai.Session.Redis" $ it "handles sessions" $ do store <- dbStore testSettings -- new session ((lookupSess1, insertSess1), mknewsessid) <- store Nothing sessid <- mknewsessid -- insert insertSess1 ("foo" :: B.ByteString) ("foo" :: B.ByteString) lookupSess1 "foo" `shouldReturn` Just "foo" -- update insertSess1 ("foo" :: B.ByteString) ("bar" :: B.ByteString) lookupSess1 "foo" `shouldReturn` Just "bar" -- non-existing key lookupSess1 "bar" `shouldReturn` Nothing -- existing session ((lookupSess2, insertSess2), mknewsessid) <- store $ Just sessid newsessid <- mknewsessid lookupSess2 "foo" `shouldReturn` Just "bar" newsessid `shouldBe` sessid -- invalid session let invalidsessid = "foobar" ((lookupSess3, insertSess3), mknewsessid) <- store $ Just invalidsessid newsessid2 <- mknewsessid newsessid2 `shouldNotBe` newsessid newsessid2 `shouldNotBe` invalidsessid lookupSess3 "foo" `shouldReturn` Nothing -- re-accessing session ((lookupSess4, insertSess4), mknewsessid) <- store $ Just sessid lookupSess4 "foo" `shouldReturn` Just "bar" -- purged session threadDelay 2000000 ((lookupSess5, insertSess5), mknewsessid) <- store $ Just sessid lookupSess5 "foo" `shouldReturn` Nothing testSettings :: SessionSettings testSettings = def {expiratinTime = 1}