packages feed

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]