hasql-queue-1.2.0.0: test/Hasql/Queue/High/AtMostOnceSpec.hs
module Hasql.Queue.High.AtMostOnceSpec where
import Hasql.Queue.High.AtMostOnce
import qualified Hasql.Encoders as E
import qualified Hasql.Decoders as D
import Test.Hspec (Spec, describe, parallel, it)
import Test.Hspec.Expectations.Lifted
import Test.Hspec.Core.Spec (sequential)
import Hasql.Queue.TestUtils
spec :: Spec
spec = describe "Hasql.Queue.High.AtMostOnce" $ parallel $ do
sequential $ aroundAll withSetup $ describe "enqueue/dequeue" $ do
it "enqueue nothing gives nothing" $ withConnection $ \conn -> do
enqueue conn E.int4 []
dequeue conn D.int4 1 `shouldReturn` []
it "enqueue 1 gives 1" $ withConnection $ \conn -> do
enqueue conn E.int4 [1]
dequeue conn D.int4 1 `shouldReturn` [1]
it "dequeue give nothing after enqueueing everything" $ withConnection $ \conn -> do
dequeue conn D.int4 1 `shouldReturn` []
it "dequeueing is in FIFO order" $ withConnection $ \conn -> do
enqueue conn E.int4 [1]
enqueue conn E.int4 [2]
dequeue conn D.int4 1 `shouldReturn` [1]
dequeue conn D.int4 1 `shouldReturn` [2]
it "dequeueing a batch of elements works" $ withConnection $ \conn -> do
enqueue conn E.int4 [1, 2, 3]
dequeue conn D.int4 2 `shouldReturn` [1, 2]
dequeue conn D.int4 2 `shouldReturn` [3]