packages feed

eventful-dynamodb-0.1.3: 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 (EventStore CounterEvent AWS, Env)
makeStore = do
  let
    dynamo = setEndpoint False "localhost" 8000 dynamoDB
  env <- newEnv Discover <&> configure dynamo

  let
    store = dynamoDBEventStore defaultDynamoDBEventStoreConfig
    store' = serializedEventStore jsonSerializer store
  liftIO $ runResourceT . runAWS env $ do
    -- Delete and recreate table
    deleteDynamoDBEventStoreTable defaultDynamoDBEventStoreConfig
    initializeDynamoDBEventStore defaultDynamoDBEventStoreConfig (provisionedThroughput 1 1)

  return (store', env)

dynamoRunner :: EventStoreRunner AWS
dynamoRunner = EventStoreRunner $ \action -> do
  (store, env) <- makeStore
  runResourceT $ runAWS env (action store)