eventium-memory 0.7.0 → 0.7.1
raw patch · 2 files changed
+44/−2 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Eventium.Store.Memory: [key] :: StreamEvent key position event -> !key
+ Eventium.Store.Memory: [key] :: QueryRange key position -> key
Files
eventium-memory.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: eventium-memory-version: 0.7.0+version: 0.7.1 synopsis: In-memory implementations for eventium description: Eventium-memory provides in-memory implementations of event stores and projection caches for the Eventium event sourcing framework. This package is ideal for development, testing, and prototyping
tests/Eventium/ProcessManagerSpec.hs view
@@ -88,13 +88,55 @@ dispatcher = fireAndForgetDispatcher $ \uuid cmd -> modifyTVar' dispatchedTVar (++ [(uuid, cmd)])- handler = cachedProcessManagerEventHandler testProcessManager reader cache dispatcher+ handler = cachedProcessManagerEventHandler (const True) testProcessManager reader cache dispatcher target = uuidFromInteger 2 event = StreamEvent (uuidFromInteger 1) 0 (emptyMetadata "") (TransferInitiated target 50) atomically $ case handler of EventHandler f -> f event dispatched <- readTVarIO dispatchedTVar dispatched `shouldBe` [(target, AcceptCredit 50)] -- The handler persisted a snapshot for the global projection (key = ()).+ snap <- readTVarIO cacheTVar+ Map.lookup () snap `shouldSatisfy` isJust++ it "skips snapshot I/O and dispatch for events the relevance predicate rejects" $ do+ eventsTVar <- newTVarIO emptyEventMap+ cacheTVar <- newTVarIO Map.empty+ dispatchedTVar <- newTVarIO ([] :: [(UUID, TestCommand)])+ let reader = tvarGlobalEventStoreReader eventsTVar+ cache = tvarProjectionCache cacheTVar+ dispatcher =+ fireAndForgetDispatcher $ \uuid cmd ->+ modifyTVar' dispatchedTVar (++ [(uuid, cmd)])+ isTransfer e = case e of TransferInitiated {} -> True; _ -> False+ handler =+ cachedProcessManagerEventHandler isTransfer testProcessManager reader cache dispatcher+ -- A Credited event: rejected by the predicate even though react/projection+ -- would otherwise touch it.+ event = StreamEvent (uuidFromInteger 1) 0 (emptyMetadata "") (Credited 100)+ atomically $ case handler of EventHandler f -> f event+ dispatched <- readTVarIO dispatchedTVar+ dispatched `shouldBe` []+ -- No snapshot was read or written for a rejected event.+ snap <- readTVarIO cacheTVar+ Map.lookup () snap `shouldBe` Nothing++ it "processes events the relevance predicate accepts, advancing the snapshot cache" $ do+ eventsTVar <- newTVarIO emptyEventMap+ cacheTVar <- newTVarIO Map.empty+ dispatchedTVar <- newTVarIO ([] :: [(UUID, TestCommand)])+ let reader = tvarGlobalEventStoreReader eventsTVar+ cache = tvarProjectionCache cacheTVar+ dispatcher =+ fireAndForgetDispatcher $ \uuid cmd ->+ modifyTVar' dispatchedTVar (++ [(uuid, cmd)])+ isTransfer e = case e of TransferInitiated {} -> True; _ -> False+ handler =+ cachedProcessManagerEventHandler isTransfer testProcessManager reader cache dispatcher+ target = uuidFromInteger 2+ event = StreamEvent (uuidFromInteger 1) 0 (emptyMetadata "") (TransferInitiated target 50)+ atomically $ case handler of EventHandler f -> f event+ dispatched <- readTVarIO dispatchedTVar+ dispatched `shouldBe` [(target, AcceptCredit 50)] snap <- readTVarIO cacheTVar Map.lookup () snap `shouldSatisfy` isJust