faktory-1.1.2.5: tests/Faktory/Ent/TrackingSpec.hs
{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}
module Faktory.Ent.TrackingSpec
( spec
) where
import Faktory.Test
import Control.Concurrent.MVar
import Faktory.Ent.Tracking
spec :: Spec
spec = do
describe "tracked" $ do
it "adds custom option so we can use TRACK GET later" $ do
var <- newMVar []
void $ workerTestCase $ \producer -> do
a <- perform @Text tracked producer "a"
modifyMVar_ var $ pure . (<> [a])
b <- perform @Text tracked producer "BOOM"
modifyMVar_ var $ pure . (<> [b])
enqueuedJobIds <- readMVar var
enqueuedJobIds `shouldSatisfy` (== 2) . length
let [aJid, bJid] = enqueuedJobIds
(aDetails, bDetails, cDetails) <-
bracket newProducerEnv closeProducer $ \producer ->
(,,)
<$> trackGetHush producer aJid
<*> trackGetHush producer bJid
<*> trackGetHush producer "madeUp"
jdState aDetails `shouldBe` JobStateSuccess
jdState bDetails `shouldBe` JobStateFailed
jdState cDetails `shouldBe` JobStateUnknown
describe "trackSet" $ do
it "updates Job Details" $ do
var <- newMVar []
void $ workerTestCase $ \producer -> do
a <- perform @Text tracked producer "a"
modifyMVar_ var $ pure . (<> [a])
enqueuedJobIds <- readMVar var
enqueuedJobIds `shouldSatisfy` (== 1) . length
let [aJid] = enqueuedJobIds
aDetails <- bracket newProducerEnv closeProducer $ \producer -> do
trackSet producer
$ SetJobDetails
{ sjdJid = aJid
, sjdPercent = Just 100
, sjdDesc = Just "Updated"
, sjdReserveUntil = Nothing
}
trackGetHush producer aJid
jdPercent aDetails `shouldBe` Just 100
jdDesc aDetails `shouldBe` Just "Updated"