amazonka-mtl-0.1.1.0: MTL-style type-class and deriving-via newtypes for Amazonka
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Monad.AWS.MockT

Description

Concrete reader monad over Matchers

Its MonadAWS instance can be used in tests where you don't have or want your own test-app transformer:

import Amazonka.S3
import Control.Monad.AWS

spec :: Spec
spec = do
  describe "someAction" $ do
    it "works" $ do
      let matcher = SendMatcher (const True) -- match all calls
           $ newListBucketsResponse          -- return no buckets
           & listBucketsResponse_buckets ?~ []

      names <- runMockT $ withMatcher matcher $ someAction
      names shouldBe []

someAction :: (MonadIO m, MonadAWS) m => m [BucketName]
someAction = do
  resp <- send newListBuckets
  pure
    $ maybe [] (map (^. bucket_name))
    $ resp ^. listBucketsResponse_buckets
Synopsis

Documentation

data MockT m a Source #

Since: 0.1.0.0

Instances

Instances details
Monad m => MonadReader Matchers (MockT m) Source # 
Instance details

Defined in Control.Monad.AWS.MockT

Methods

ask :: MockT m Matchers #

local :: (Matchers -> Matchers) -> MockT m a -> MockT m a #

reader :: (Matchers -> a) -> MockT m a #

MonadIO m => MonadAWS (MockT m) Source # 
Instance details

Defined in Control.Monad.AWS.MockT

MonadIO m => MonadIO (MockT m) Source # 
Instance details

Defined in Control.Monad.AWS.MockT

Methods

liftIO :: IO a -> MockT m a #

Applicative m => Applicative (MockT m) Source # 
Instance details

Defined in Control.Monad.AWS.MockT

Methods

pure :: a -> MockT m a #

(<*>) :: MockT m (a -> b) -> MockT m a -> MockT m b #

liftA2 :: (a -> b -> c) -> MockT m a -> MockT m b -> MockT m c #

(*>) :: MockT m a -> MockT m b -> MockT m b #

(<*) :: MockT m a -> MockT m b -> MockT m a #

Functor m => Functor (MockT m) Source # 
Instance details

Defined in Control.Monad.AWS.MockT

Methods

fmap :: (a -> b) -> MockT m a -> MockT m b #

(<$) :: a -> MockT m b -> MockT m a #

Monad m => Monad (MockT m) Source # 
Instance details

Defined in Control.Monad.AWS.MockT

Methods

(>>=) :: MockT m a -> (a -> MockT m b) -> MockT m b #

(>>) :: MockT m a -> MockT m b -> MockT m b #

return :: a -> MockT m a #

MonadUnliftIO m => MonadUnliftIO (MockT m) Source # 
Instance details

Defined in Control.Monad.AWS.MockT

Methods

withRunInIO :: ((forall a. MockT m a -> IO a) -> IO b) -> MockT m b #

runMockT :: MockT m a -> m a Source #

Since: 0.1.0.0

Setting up Matchers

data Matcher where Source #

Define a response to provide for any matched requests

Constructors

SendMatcher :: forall a. (AWSRequest a, Typeable a, Typeable (AWSResponse a)) => (a -> Bool) -> Either Error (AWSResponse a) -> Matcher

Matches calls to send where the given predicate holds

Since: 0.1.0.0

AwaitMatcher :: forall a. (AWSRequest a, Typeable a) => (Wait a -> a -> Bool) -> Either Error Accept -> Matcher

Matches calls to await where the given predicate holds

Since: 0.1.0.0

withMatcher :: (MonadReader env m, HasMatchers env) => Matcher -> m a -> m a Source #

Add a Matcher for the duration of the block

Since: 0.1.0.0

withMatchers :: (MonadReader env m, HasMatchers env) => [Matcher] -> m a -> m a Source #

Add multiple Matchers for the duration of the block

Since: 0.1.0.0