greskell-1.0.0.0: test/Data/Greskell/GraphSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.Greskell.GraphSpec (main,spec) where
import Data.Aeson (toJSON, FromJSON)
import qualified Data.Aeson as Aeson
import qualified Data.ByteString.Lazy as BSL
import Data.Monoid (Monoid(..), (<>))
import Data.Text (Text)
import Test.Hspec
import Data.Greskell.Graph
( AProperty(..),
-- PropertyMapSingle, PropertyMapList,
AEdge(..), AVertexProperty(..), AVertex(..),
ElementID(..)
)
import Data.Greskell.GraphSON
( nonTypedGraphSON, typedGraphSON, typedGraphSON',
nonTypedGValue, typedGValue', GValueBody(..)
)
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
spec_AEdge
spec_AProperty
spec_AVertexProperty
spec_AVertex
loadGraphSON :: FromJSON a => FilePath -> IO (Either String a)
loadGraphSON filename = fmap Aeson.eitherDecode $ BSL.readFile ("test/graphson/" ++ filename)
spec_AEdge :: Spec
spec_AEdge = describe "AEdge" $ do
it "should parse GraphSON v1" $ do
let expected = nonTypedGraphSON
$ AEdge
{ aeId = ElementID $ nonTypedGValue $ GNumber 13,
aeLabel = "develops"
}
loadGraphSON "edge_v1.json" `shouldReturn` Right expected
let expected_v23 = typedGraphSON
$ AEdge
{ aeId = ElementID $ typedGValue' "g:Int32" $ GNumber 13,
aeLabel = "develops"
}
it "should parse GraphSON v2" $ do
loadGraphSON "edge_v2.json" `shouldReturn` Right expected_v23
it "should parse GraphSON v3" $ do
loadGraphSON "edge_v3.json" `shouldReturn` Right expected_v23
spec_AProperty :: Spec
spec_AProperty = describe "AProperty" $ do
it "should parse GraphSON v1 (GValue)" $ do
let ex = nonTypedGraphSON $ AProperty "since" $ nonTypedGValue $ GNumber 2009
loadGraphSON "property_v1.json" `shouldReturn` Right ex
it "should parse GraphSON v1 (bare Int)" $ do
let ex = nonTypedGraphSON $ AProperty "since" $ (2009 :: Int)
loadGraphSON "property_v1.json" `shouldReturn` Right ex
let ex23 = typedGraphSON $ AProperty "since" $ typedGValue' "g:Int32" $ GNumber 2009
ex23_nowrap = typedGraphSON $ AProperty "since" $ (2009 :: Int)
it "should parse GraphSON v2 (GValue)" $ do
loadGraphSON "property_v2.json" `shouldReturn` Right ex23
it "should parse GraphSON v2 (bare Int)" $ do
loadGraphSON "property_v2.json" `shouldReturn` Right ex23_nowrap
it "should parse GraphSON v3 (GValue)" $ do
loadGraphSON "property_v3.json" `shouldReturn` Right ex23
it "should parse GraphSON v3 (bare Int)" $ do
loadGraphSON "property_v3.json" `shouldReturn` Right ex23_nowrap
spec_AVertexProperty :: Spec
spec_AVertexProperty = describe "AVertexProperty" $ do
it "should parse GraphSON v1" $ do
let ex = nonTypedGraphSON $
AVertexProperty
{ avpId = ElementID $ nonTypedGValue $ GNumber 0,
avpLabel = "name",
avpValue = nonTypedGValue $ GString "marko"
}
loadGraphSON "vertex_property_v1.json" `shouldReturn` Right ex
let ex23 = typedGraphSON $
AVertexProperty
{ avpId = ElementID $ typedGValue' "g:Int64" $ GNumber 0,
avpLabel = "name",
avpValue = nonTypedGValue $ GString "marko"
}
it "should parse GraphSON v2" $ do
loadGraphSON "vertex_property_v2.json" `shouldReturn` Right ex23
it "should parse GraphSON v3" $ do
loadGraphSON "vertex_property_v3.json" `shouldReturn` Right ex23
spec_AVertex :: Spec
spec_AVertex = describe "AVertex" $ do
it "should parse GraphSON v1" $ do
let ex = nonTypedGraphSON $
AVertex
{ avId = ElementID $ nonTypedGValue $ GNumber 1,
avLabel = "person"
}
loadGraphSON "vertex_v1.json" `shouldReturn` Right ex
let ex23 = typedGraphSON $
AVertex
{ avId = ElementID $ typedGValue' "g:Int32" $ GNumber 1,
avLabel = "person"
}
it "should parse GraphSON v2" $ do
loadGraphSON "vertex_v2.json" `shouldReturn` Right ex23
it "should parse GraphSON v3" $ do
loadGraphSON "vertex_v3.json" `shouldReturn` Right ex23