greskell-0.2.1.0: test/ServerBehaviorTest.hs
{-# LANGUAGE OverloadedStrings #-}
module Main (main,spec) where
import qualified Data.Vector as V
import qualified Network.Greskell.WebSocket.Client as WS
import Test.Hspec
import Data.Greskell.Binder (newBind, runBinder)
import Data.Greskell.Graph
( AVertex, Key,
)
import Data.Greskell.GTraversal
( Walk, GTraversal, SideEffect,
source, sV', sAddV', gProperty, gId, gValues, gHasId, gHasLabel, gHas2,
($.), liftWalk
)
import ServerTest.Common (withEnv, withClient)
main :: IO ()
main = hspec spec
spec :: Spec
spec = withEnv $ do
spec_values_type
clearGraph :: WS.Client -> IO ()
clearGraph client = WS.drainResults =<< WS.submitRaw client "g.V().drop()" Nothing
spec_values_type :: SpecWith (String,Int)
spec_values_type = describe "return type of .values step" $ do
specify "input Int, get Int" $ withClient $ \client -> do
let prop_key :: Key AVertex Int
prop_key = "foobar"
searchProp = WS.drainResults =<< WS.submit client script (Just binding)
where
(script, binding) = runBinder $ do
input <- newBind (100 :: Int)
return $ gHas2 prop_key input $. sV' [] $ source "g"
putProp = WS.slurpResults =<< WS.submit client script (Just binding)
where
(script, binding) = runBinder $ do
input <- newBind (100 :: Int)
return $ liftWalk gId $. gProperty prop_key input $. sAddV' "hoge" $ source "g"
getProp vid = WS.slurpResults =<< WS.submit client script (Just binding)
where
(script, binding) = runBinder $ do
vid_var <- newBind vid
return $ gValues [prop_key] $. gHasId vid_var $. gHasLabel "hoge" $. sV' [] $ source "g"
clearGraph client
searchProp
got_ids <- putProp
got <- getProp (got_ids V.! 0)
V.toList got `shouldBe` [100]