morley-client-0.3.1: test/Test/KeyRevealing.hs
-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA
module Test.KeyRevealing
( test_keyRevealing
) where
import Test.HUnit (Assertion, assertFailure)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase)
import Lorentz qualified as L
import Morley.Client
import Morley.Michelson.Runtime.GState (genesisAddress1)
import Morley.Michelson.Typed
import Morley.Tezos.Core (tz)
import Test.Util
import TestM
fakeState :: FakeState
fakeState = defaultFakeState
{ fsImplicits = one $ second revealKeyState $ genesisState @1
}
test_keyRevealing :: TestTree
test_keyRevealing = testGroup "Fake test key revealing"
[ testCase "Manager key for new address is revealed only once for transfer" $ handleSuccess $
runFakeTest chainOperationHandlers fakeState $ do
senderAddress <- genKey "sender"
dummyTransfer addr1 $ awaAddress senderAddress
mbManagerKey <- getManagerKey $ awaAddress senderAddress
when (isJust mbManagerKey) $
fail "Manager key was expected not to be revealed, but it's revealed."
dummyTransfer senderAddress genesisAddress1
mbManagerKey' <- getManagerKey $ awaAddress senderAddress
when (isNothing mbManagerKey') $
fail "Manager key was expected to be revealed, but it's not revealed."
local
(const noRevealHandlers)
(dummyTransfer senderAddress genesisAddress1)
, testCase "Manager key for new address is revealed only once for origination" $ handleSuccess $
runFakeTest chainOperationHandlers fakeState $ do
originatorAddress <- genKey "originator"
dummyTransfer addr1 $ awaAddress originatorAddress
mbManagerKey <- getManagerKey $ awaAddress originatorAddress
when (isJust mbManagerKey) $
fail "Manager key was expected not to be revealed, but it's revealed."
originateDummy originatorAddress
mbManagerKey' <- getManagerKey $ awaAddress originatorAddress
when (isNothing mbManagerKey') $
fail "Manager key was expected to be revealed, but it's not revealed."
local
(const noRevealHandlers)
(originateDummy originatorAddress)
]
where
addr1 = addrAndAliasFromGenesisState @1
dummyTransfer from to =
void $ transfer from to [tz|10u|] DefEpName (toVal ()) Nothing
originateDummy addr =
lOriginateContract OverwriteDuplicateAlias "dummy" addr [tz|10u|]
dumbLorentzContract () Nothing Nothing
-- | Handlers which don't allow to reveal key.
noRevealHandlers :: (Monad m) => TestHandlers m
noRevealHandlers = TestHandlers $ chainOperationHandlers
{ hGetPublicKey = \_ -> throwM $ UnexpectedClientCall "getPublicKey" }
dumbLorentzContract :: L.Contract Integer () ()
dumbLorentzContract = L.defaultContract $
L.drop L.# L.unit L.# L.nil L.# L.pair
handleSuccess :: Either SomeException a -> Assertion
handleSuccess (Left err) = assertFailure $ displayException err
handleSuccess (Right _) = pass