import Test.Hspec import Setup import Data.Text (Text) import Prelude hiding (lookup) import Database.MongoDB import Database.MongoDB.Queue import Control.Concurrent main :: IO () main = hspec $ describe "MongoDB queue" $ do it "should handle what was emitted" $ do let helloWorld createWorker getNext = do doc <- runDB $ do emitter <- createEmitter worker <- createWorker emit emitter [("hello" :: Text) =: ("world" :: Text)] getNext worker Just world <- lookup ("hello" :: Text) doc world `shouldBe` ("world" :: Text) helloWorld createTailBroker nextFromQueueTail helloWorld createPollBroker nextFromQueuePoll it "should wait for a document to be inserted" $ do let waitForInsertion createWorker getNext = do emitter <- runDB createEmitter worker <- runDB createWorker forkIO $ do threadDelay $ 1 * 1000 * 1000 -- microseconds, 1 second runDB $ emit emitter [("hello" :: Text) =: ("world" :: Text)] doc <- runDB $ getNext worker Just world <- lookup ("hello" :: Text) doc world `shouldBe` ("world" :: Text) waitForInsertion createTailBroker nextFromQueueTail waitForInsertion createPollBroker nextFromQueuePoll