packages feed

datadog-0.2.0.0: test/Test/Network/Datadog/Event.hs

module Test.Network.Datadog.Event (spec) where

import Control.Concurrent (threadDelay)
import Control.Lens ((^.))
import Control.Monad (when)
import Data.Time.Clock (addUTCTime, getCurrentTime)
import Test.Hspec (Spec, describe, expectationFailure, it)

import Network.Datadog (Environment, createEnvironment, loadKeysFromEnv)
import Network.Datadog.Event
  (EventPriority (NormalPriority), createEvent, id', loadEvent, loadEvents, minimalEventSpec)

spec :: Spec
spec = describe "Event spec" $ do
  it "Does event creation and loading methods" $ do
    let environment :: IO Environment
        environment = createEnvironment =<< loadKeysFromEnv
    env <- environment
    time <- getCurrentTime
    let testDetails = minimalEventSpec
          "Datadog Test Event"
          "This is a test for the Haskell Datadog API."
          time
          NormalPriority
    threadDelay 500000
    event1 <- createEvent env testDetails
    threadDelay 20000000
    event2 <- loadEvent env (event1 ^. id')
    threadDelay 500000
    events <- loadEvents env (addUTCTime (-60) time, addUTCTime 60 time) Nothing []
    when (event1 /= event2) $
      expectationFailure "Created and fetched events are not identical"
    when (event1 `notElem` events) $
      expectationFailure "Created event not fetched from group load"