otel-effectful-1.0.0: test/Effectful/OpenTelemetry/Protocol/EffectSpec.hs
module Effectful.OpenTelemetry.Protocol.EffectSpec (spec) where
import Control.Monad (forM_)
import Effectful
import Effectful.Concurrent (runConcurrent)
import Effectful.Concurrent.STM (atomically, flushTQueue, newTQueueIO)
import Effectful.Hspec
import Effectful.OpenTelemetry.Exporter.STM qualified as Exporter
import Effectful.OpenTelemetry.Protocol.Effect (export, runOTLPWith)
import Prelude
spec :: (IOE :> es, Hspec :> es) => Eff es ()
spec = runConcurrent do
prop "exports each item individually in the correct order" \xs -> do
q <- newTQueueIO
runOTLPWith (Exporter.tqueue @Int q) $
forM_ @[] xs \x -> do
export x
atomically (flushTQueue q) `shouldReturn` [x]