eventful-dynamodb-0.2.0: tests/Eventful/Store/DynamoDBSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Eventful.Store.DynamoDBSpec (spec) where
import Control.Lens ((<&>))
import Network.AWS
import Network.AWS.DynamoDB
import Test.Hspec
import Eventful
import Eventful.Store.DynamoDB
import Eventful.TestHelpers
spec :: Spec
spec = do
describe "DynamoDB event store" $ do
eventStoreSpec dynamoRunner
makeStore :: IO (EventStoreWriter AWS CounterEvent, VersionedEventStoreReader AWS CounterEvent, Env)
makeStore = do
let
dynamo = setEndpoint False "localhost" 8000 dynamoDB
env <- newEnv Discover <&> configure dynamo
let
writer = serializedEventStoreWriter jsonSerializer $ dynamoDBEventStoreWriter defaultDynamoDBEventStoreConfig
reader = serializedVersionedEventStoreReader jsonSerializer $ dynamoDBEventStoreReader defaultDynamoDBEventStoreConfig
liftIO $ runResourceT . runAWS env $ do
-- Delete and recreate table
deleteDynamoDBEventStoreTable defaultDynamoDBEventStoreConfig
initializeDynamoDBEventStore defaultDynamoDBEventStoreConfig (provisionedThroughput 1 1)
return (writer, reader, env)
dynamoRunner :: EventStoreRunner AWS
dynamoRunner = EventStoreRunner $ \action -> do
(writer, reader, env) <- makeStore
runResourceT $ runAWS env (action writer reader)