cleveland-0.2.1: test/TestSuite/Cleveland/BatchOperation.hs
-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA
module TestSuite.Cleveland.BatchOperation
( test_SomeCases
) where
import Test.Tasty (TestTree)
import Morley.Tezos.Core (mkMutez)
import Morley.Util.SizedList qualified as SL
import Test.Cleveland
import Test.Cleveland.Lorentz.Consumer
unsafeMkMutez' :: Natural -> Mutez
unsafeMkMutez' = either error id . mkMutez
test_SomeCases :: [TestTree]
test_SomeCases =
[ testScenario "Origination and transfer within a batch work" $ scenario do
test1 <- newFreshAddress auto
contract1 <- inBatch $ do
contract1 <- originate "c" ([] :: [()]) contractConsumer
transfer test1 [tz|100u|]
return contract1
getBalance test1 @@== 100
transfer contract1 [tz|200u|]
getBalance contract1 @@== 200
, testScenario "Loops within batch work" $ scenario do
addresses <- traverse newFreshAddress $ SL.replicateT @5 auto
let balances = SL.generate $ \i -> unsafeMkMutez' $ (i + 1) * 100
inBatch $ for_ (SL.zip addresses balances) $ uncurry transfer
traverse getBalance addresses @@== balances
, testScenario "Can return multiple values from a batch" $ scenario do
(_contract1, _contract2) <- inBatch $ do
contract1 <- originate "c1" ([] :: [Integer]) contractConsumer
contract2 <- originate "c2" ([] :: [Integer]) contractConsumer
return (contract1, contract2)
return ()
]