freckle-app-1.20.0.1: tests/Freckle/App/AsyncSpec.hs
module Freckle.App.AsyncSpec
( spec
) where
import Freckle.App.Prelude
import Blammo.Logging
import Blammo.Logging.ThreadContext qualified as Blammo
import Control.Concurrent.Async (wait)
import Data.Aeson.KeyMap qualified as KeyMap
import Freckle.App.Async (async)
import OpenTelemetry.Context qualified as OpenTelemetry
import OpenTelemetry.Context.ThreadLocal qualified as OpenTelemetry
import Test.Hspec
spec :: Spec
spec = do
describe "async" $ do
it @(IO ()) "preserves Blammo context" $ do
let kvs = ["a" .= ("xyz" :: Text)]
Blammo.withThreadContext kvs $
(wait =<< async Blammo.myThreadContext)
`shouldReturn` KeyMap.fromList kvs
it @(IO ()) "preserves OpenTelemetry context" $ do
k <- OpenTelemetry.newKey "a"
let v = "xyz" :: Text
OpenTelemetry.adjustContext $ OpenTelemetry.insert k v
(wait =<< async (OpenTelemetry.lookup k <$> OpenTelemetry.getContext))
`shouldReturn` Just v