module Test.Cleveland.Internal.Scenario
( Scenario
, Scenario'(..)
, MonadScenario(..)
, scenarioEmulated
, scenarioNetwork
, withInitialNow
, withInitialLevel
, withMinBlockTime
, withChainId
) where
import Control.Monad.Reader (withReaderT)
import Morley.Michelson.Runtime.GState (gsChainIdL)
import Morley.Tezos.Core qualified as TC
import Test.Cleveland.Internal.Abstract
import Test.Cleveland.Internal.Client
import Test.Cleveland.Internal.Pure
type Scenario m = MonadScenario m => Scenario' m
data Scenario' m where
ScenarioEmulated :: EmulatedT PureM () -> Scenario' PureM
ScenarioNetwork :: NetworkT ClientM () -> Scenario' ClientM
class MonadFail m => MonadScenario m where
scenario :: ClevelandT m () -> Scenario' m
instance MonadScenario PureM where
scenario :: ClevelandT PureM () -> Scenario' PureM
scenario = EmulatedT PureM () -> Scenario' PureM
ScenarioEmulated (EmulatedT PureM () -> Scenario' PureM)
-> (ClevelandT PureM () -> EmulatedT PureM ())
-> ClevelandT PureM ()
-> Scenario' PureM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (EmulatedCaps PureM -> ClevelandCaps PureM)
-> ClevelandT PureM () -> EmulatedT PureM ()
forall r' r (m :: * -> *) a.
(r' -> r) -> ReaderT r m a -> ReaderT r' m a
withReaderT (Getting
(ClevelandCaps PureM) (EmulatedCaps PureM) (ClevelandCaps PureM)
-> EmulatedCaps PureM -> ClevelandCaps PureM
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting
(ClevelandCaps PureM) (EmulatedCaps PureM) (ClevelandCaps PureM)
forall caps.
HasClevelandCaps caps =>
Lens' caps (ClevelandCaps (ClevelandBaseMonad caps))
clevelandCapsL)
instance MonadScenario ClientM where
scenario :: ClevelandT ClientM () -> Scenario' ClientM
scenario = NetworkT ClientM () -> Scenario' ClientM
ScenarioNetwork (NetworkT ClientM () -> Scenario' ClientM)
-> (ClevelandT ClientM () -> NetworkT ClientM ())
-> ClevelandT ClientM ()
-> Scenario' ClientM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (NetworkCaps ClientM -> ClevelandCaps ClientM)
-> ClevelandT ClientM () -> NetworkT ClientM ()
forall r' r (m :: * -> *) a.
(r' -> r) -> ReaderT r m a -> ReaderT r' m a
withReaderT (Getting
(ClevelandCaps ClientM)
(NetworkCaps ClientM)
(ClevelandCaps ClientM)
-> NetworkCaps ClientM -> ClevelandCaps ClientM
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting
(ClevelandCaps ClientM)
(NetworkCaps ClientM)
(ClevelandCaps ClientM)
forall caps.
HasClevelandCaps caps =>
Lens' caps (ClevelandCaps (ClevelandBaseMonad caps))
clevelandCapsL)
scenarioEmulated :: EmulatedT PureM () -> Scenario' PureM
scenarioEmulated :: EmulatedT PureM () -> Scenario' PureM
scenarioEmulated = EmulatedT PureM () -> Scenario' PureM
ScenarioEmulated
scenarioNetwork :: NetworkT ClientM () -> Scenario' ClientM
scenarioNetwork :: NetworkT ClientM () -> Scenario' ClientM
scenarioNetwork = NetworkT ClientM () -> Scenario' ClientM
ScenarioNetwork
withModifiedState
:: (PureState -> PureState)
-> Scenario' PureM
-> Scenario' PureM
withModifiedState :: (PureState -> PureState) -> Scenario' PureM -> Scenario' PureM
withModifiedState PureState -> PureState
modfn (ScenarioEmulated EmulatedT PureM ()
emulated) =
EmulatedT PureM () -> Scenario' PureM
ScenarioEmulated (EmulatedT PureM () -> Scenario' PureM)
-> EmulatedT PureM () -> Scenario' PureM
forall a b. (a -> b) -> a -> b
$ PureM () -> EmulatedT PureM ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ((PureState -> PureState) -> PureM ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify PureState -> PureState
modfn) EmulatedT PureM () -> EmulatedT PureM () -> EmulatedT PureM ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> EmulatedT PureM ()
emulated
withInitialNow
:: TC.Timestamp
-> Scenario' PureM
-> Scenario' PureM
withInitialNow :: Timestamp -> Scenario' PureM -> Scenario' PureM
withInitialNow = (PureState -> PureState) -> Scenario' PureM -> Scenario' PureM
withModifiedState ((PureState -> PureState) -> Scenario' PureM -> Scenario' PureM)
-> (Timestamp -> PureState -> PureState)
-> Timestamp
-> Scenario' PureM
-> Scenario' PureM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ASetter PureState PureState Timestamp Timestamp
-> Timestamp -> PureState -> PureState
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter PureState PureState Timestamp Timestamp
Lens' PureState Timestamp
psNow
withInitialLevel
:: Natural
-> Scenario' PureM
-> Scenario' PureM
withInitialLevel :: Natural -> Scenario' PureM -> Scenario' PureM
withInitialLevel = (PureState -> PureState) -> Scenario' PureM -> Scenario' PureM
withModifiedState ((PureState -> PureState) -> Scenario' PureM -> Scenario' PureM)
-> (Natural -> PureState -> PureState)
-> Natural
-> Scenario' PureM
-> Scenario' PureM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ASetter PureState PureState Natural Natural
-> Natural -> PureState -> PureState
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter PureState PureState Natural Natural
Lens' PureState Natural
psLevel
withMinBlockTime
:: Natural
-> Scenario' PureM
-> Scenario' PureM
withMinBlockTime :: Natural -> Scenario' PureM -> Scenario' PureM
withMinBlockTime = (PureState -> PureState) -> Scenario' PureM -> Scenario' PureM
withModifiedState ((PureState -> PureState) -> Scenario' PureM -> Scenario' PureM)
-> (Natural -> PureState -> PureState)
-> Natural
-> Scenario' PureM
-> Scenario' PureM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ASetter PureState PureState Natural Natural
-> Natural -> PureState -> PureState
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter PureState PureState Natural Natural
Lens' PureState Natural
psMinBlockTime
withChainId
:: TC.ChainId
-> Scenario' PureM
-> Scenario' PureM
withChainId :: ChainId -> Scenario' PureM -> Scenario' PureM
withChainId = (PureState -> PureState) -> Scenario' PureM -> Scenario' PureM
withModifiedState ((PureState -> PureState) -> Scenario' PureM -> Scenario' PureM)
-> (ChainId -> PureState -> PureState)
-> ChainId
-> Scenario' PureM
-> Scenario' PureM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ASetter PureState PureState ChainId ChainId
-> ChainId -> PureState -> PureState
forall s t a b. ASetter s t a b -> b -> s -> t
set ((GState -> Identity GState) -> PureState -> Identity PureState
Lens' PureState GState
psGState ((GState -> Identity GState) -> PureState -> Identity PureState)
-> ((ChainId -> Identity ChainId) -> GState -> Identity GState)
-> ASetter PureState PureState ChainId ChainId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ChainId -> Identity ChainId) -> GState -> Identity GState
Lens' GState ChainId
gsChainIdL)