packages feed

eventium-core-0.6.0: tests/Eventium/TelemetrySpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Eventium.TelemetrySpec (spec) where

import Data.IORef
import Eventium.Store.Types (emptyMetadata)
import Eventium.Telemetry
import qualified Eventium.UUID as UUID
import Test.Hspec

spec :: Spec
spec = describe "Telemetry" $ do
  it "silentTelemetry emits nothing (runs cleanly, returns unit)" $ do
    let t = silentTelemetry :: Telemetry IO
    t.emit (EventsPersisted UUID.nil [emptyMetadata "Foo"] []) `shouldReturn` ()

  it "a capturing sink records the signal it is given" $ do
    ref <- newIORef []
    let t = Telemetry (\sig -> modifyIORef' ref (sig :)) :: Telemetry IO
    let sig = EventsPersisted UUID.nil [emptyMetadata "Foo"] []
    t.emit sig
    readIORef ref `shouldReturn` [sig]