packages feed

persistent-zookeeper-0.0.1: tests/basic-test.hs

{-# LANGUAGE TemplateHaskell, QuasiQuotes, OverloadedStrings #-}
{-# LANGUAGE TypeFamilies, EmptyDataDecls, GADTs #-}
module Main where

import Database.Persist
import Database.Persist.Zookeeper
import Database.Persist.TH
import Language.Haskell.TH.Syntax
import Data.Maybe
import Test.Hspec

let zookeeperSettings = mkPersistSettings (ConT ''ZookeeperBackend)
 in share [mkPersist zookeeperSettings] [persistLowerCase|
Person
    name String
    age Int
    PersonU name
    deriving Show
    deriving Eq
|]

zookeeperConf :: ZookeeperConf
zookeeperConf = ZookeeperConf "localhost:2181" 10000 1 50 30

main :: IO ()
main = 
  withZookeeperConn zookeeperConf $ \conn -> do
    hspec $ do
      let key = (Key (PersistText "/person/WyJzVGVzdC9ob2dlIl0="))
      let val = Person "Test/hoge" 12
      describe "PersistUnique test" $ do
        it "insertUnique" $ do
          v <- flip runZookeeperPool conn $ do
            deleteBy $ PersonU "Test/hoge"
            insertUnique val
          v `shouldBe` (Just key)
        it "getBy" $ do
          v <- flip runZookeeperPool conn $ do
            getBy $ PersonU "Test/hoge" 
          (entityKey (fromJust v)) `shouldBe` key
          (entityVal (fromJust v)) `shouldBe` val
          v `shouldBe` (Just (Entity key val))
        it "deleteBy" $ do
          v <- flip runZookeeperPool conn $ do
            deleteBy $ PersonU "Test/hoge"
            getBy $ PersonU "Test/hoge"
          v `shouldBe` Nothing
      describe "PersistStore test" $ do
        it "StoreTest" $ do
          key' <- flip runZookeeperPool conn $ do
            insert val
          v <- flip runZookeeperPool conn $ do
            get key' :: ZookeeperT IO (Maybe Person)
          print $ show key'
          v `shouldBe` (Just val)
          v' <- flip runZookeeperPool conn $ do
            delete key'
            get key'
          v' `shouldBe` Nothing