orchestrate-0.2.0.3: specs/Specs/Orchestrate/GraphSpec.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Specs.Orchestrate.GraphSpec where
import Control.Error
import Control.Exception
import Control.Lens
import Control.Monad
import Test.Hspec
import Database.Orchestrate.Graph
import Database.Orchestrate.KeyValue
import Database.Orchestrate.Types
import Database.Orchestrate.Utils
import Specs.Orchestrate.Spec.Types
import Specs.Orchestrate.Spec.Utils
-- Names for 2014 tropical cyclones (from NOAA).
fixtures :: [Person]
fixtures = [ Person "Bertha" 1 -- 0
, Person "Fay" 9 -- 1
, Person "Laura" 8 -- 2
, Person "Rene" 2 -- 3
]
#if NETWORK_SPECS
spec :: Spec
spec = describe "Database.Orchestrate.Graph" $ around_ (withFixtures fixtures) $ do
describe "createRel and getRel" $
it "should create relationships that getRel can retrieve." $ do
let bertha = fixtures !! 0
rene = fixtures !! 3
r' <- run $ createRel bertha "brother" rene
r' `shouldSatisfy` isRight
r <- run $ getRel bertha "brother" []
r ^? _Right . resultCount `shouldBe` Just 1
r ^.. _Right . resultList . traverse . itemValue . personName
`shouldBe` ["Rene"]
describe "deleteRel" $
it "should have tests" $ do
let fay = fixtures !! 1
laura = fixtures !! 2
void . run' $ createRel fay "sister" laura
void . run' $ deleteRel fay "sister" laura
r <- (run $ getRel fay "sister" []) :: IO (Either SomeException (RelList Person Person))
r ^? _Right . resultCount `shouldBe` Just 0
#else
spec :: Spec
spec = describe "Database.Orchestrate.Graph" $
it "should contain tests." $
pendingWith "configure with \"--enable-tests -fnetwork-specs\"."
#endif