faktory-1.0.0.0: tests/FaktorySpec.hs
module FaktorySpec
( spec
) where
import Faktory.Prelude
import Control.Concurrent.MVar
import Faktory.Client
import Faktory.Job
import Faktory.Settings
import Faktory.Worker
import Test.Hspec
spec :: Spec
spec = describe "Faktory" $ do
it "can push and process jobs" $ do
settings <- envSettings
bracket (newClient settings Nothing) closeClient $ \client -> do
void $ flush client
void $ perform @Text mempty client "a"
void $ perform @Text mempty client "b"
void $ perform @Text mempty client "HALT"
processedJobs <- newMVar ([] :: [Text])
runWorker settings $ \job -> do
modifyMVar_ processedJobs $ pure . (job :)
when (job == "HALT") $ throw WorkerHalt
jobs <- readMVar processedJobs
jobs `shouldMatchList` ["a", "b", "HALT"]
it "can push jobs with optional attributes" $ do
settings <- envSettings
bracket (newClient settings Nothing) closeClient $ \client -> do
void $ flush client
void $ perform @Text once client "a"
void $ perform @Text (retry 0) client "b"
void $ perform @Text mempty client "HALT"
processedJobs <- newMVar ([] :: [Text])
runWorker settings $ \job -> do
modifyMVar_ processedJobs $ pure . (job :)
when (job == "HALT") $ throw WorkerHalt
jobs <- readMVar processedJobs
jobs `shouldMatchList` ["a", "b", "HALT"]