packages feed

net-spider-0.4.1.0: test/NetSpider/SnapshotSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module NetSpider.SnapshotSpec (main,spec) where

import Data.Monoid ((<>))
import Data.Text (Text)
import Test.Hspec

import JSONUtil (specJSONFromTo)

import NetSpider.Timestamp (fromEpochMillisecond)
import NetSpider.Snapshot.Internal (SnapshotLink(..), SnapshotNode(..))

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
  describe "SnapshotLink" $ do
    specJSONFromTo
      "Text ID, () link attribute"
      (    "{\"source_node\": \"s\", \"dest_node\": \"d\","
        <> " \"is_directed\": false, \"link_attrs\": [],"
        <> " \"timestamp\": {\"epoch_time\": 5000} }"
      )
      SnapshotLink
      { _sourceNode = ("s" :: Text),
        _destinationNode = ("d" :: Text),
        _isDirected = False,
        _linkTimestamp = fromEpochMillisecond 5000,
        _linkAttributes = ()
      }
  describe "SnapshotNode" $ do
    specJSONFromTo
      "Int ID, null timestamp, Text attribute"
      (    "{\"node_id\": 999, \"is_on_boundary\": true,"
        <> " \"timestamp\": null, \"node_attrs\": \"foobar\"}"
      )
      SnapshotNode
      { _nodeId = (999 :: Int),
        _isOnBoundary = True,
        _nodeTimestamp = Nothing,
        _nodeAttributes = Just ("foobar" :: Text)
      }