nri-kafka-0.4.0.1: src/Kafka/Test.hs
-- | Helpers for testing code that sends messages to Kafka.
module Kafka.Test
( stub,
)
where
import qualified Data.IORef
import qualified Expect
import qualified GHC.Stack as Stack
import qualified Kafka
import qualified Kafka.Internal as Internal
import qualified Platform
-- | Can be used to test your Kafka writer.
-- yields a mock Kafka handler, and returns an expectation wrapping a list of
-- messages that would have been written if the handler was real
stub ::
(Stack.HasCallStack) =>
(Internal.Handler -> Expect.Expectation) ->
Expect.Expectation' (List Kafka.Msg)
stub stubbed = do
logRef <- Expect.fromIO (Data.IORef.newIORef [])
doAnything <- Expect.fromIO Platform.doAnythingHandler
let sendStub = \msg' -> do
Data.IORef.modifyIORef' logRef (\prev -> msg' : prev)
|> map Ok
|> Platform.doAnything doAnything
let mockHandler =
Internal.Handler
{ Internal.sendAsync = \_ -> sendStub,
Internal.sendSync = sendStub
}
Expect.around (\f -> f mockHandler) (Stack.withFrozenCallStack stubbed)
Expect.fromIO (Data.IORef.readIORef logRef)
|> map List.reverse