cleveland-0.1.2: test/TestSuite/Cleveland/PrefixNetworkScenario.hs
-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA
module TestSuite.Cleveland.PrefixNetworkScenario
( test_PrefixNetworkScenario
, test_newAddress_with_prefix
) where
import Data.Fixed (Nano)
import Data.Text (takeEnd)
import Data.Time.Clock.POSIX (getPOSIXTime)
import System.IO.Temp (withSystemTempDirectory)
import Test.Tasty (TestTree)
import Test.Tasty.HUnit (testCase, (@=?))
import Morley.Client qualified as Client
import Morley.Client.TezosClient.Types (tceAliasPrefixL, tceMbTezosClientDataDirL)
import Morley.Tezos.Crypto (SecretKey, detSecretKey)
import Test.Cleveland
import Test.Cleveland.Internal.Abstract (Moneybag(Moneybag), moneybagL)
import Test.Cleveland.Internal.Client
(neMoneybagAliasL, neMorleyClientEnvL, neSecretKeyL, runClevelandT)
import Test.Cleveland.Tasty (modifyNetworkEnv, setAliasPrefix, whenNetworkEnabled)
aliasName :: Client.Alias
aliasName = Client.mkAlias "testMoneybagAlias"
aliasPrefix :: Text
aliasPrefix = "testPrefix"
mangleNetworkEnv :: SecretKey -> TestTree -> TestTree
mangleNetworkEnv sk = modifyNetworkEnv $
(neMorleyClientEnvL . Client.mceTezosClientL . tceAliasPrefixL .~ Just aliasPrefix)
. (neSecretKeyL .~ Just sk)
. (neMoneybagAliasL .~ aliasName)
setTmpDir :: FilePath -> NetworkEnv -> NetworkEnv
setTmpDir dir = neMorleyClientEnvL . Client.mceTezosClientL . tceMbTezosClientDataDirL .~ Just dir
test_PrefixNetworkScenario :: IO TestTree
test_PrefixNetworkScenario = do
-- use 7 digits of the current POSIX time in nanoseconds to generate seed
-- this ensures we test for a fresh key more often than not
-- taking 7 digits ensures that we're generating Ed25519 key.
seed <- encodeUtf8 . takeEnd 7 . show @Text . realToFrac @_ @Nano <$> getPOSIXTime
let key = detSecretKey seed
pure $ mangleNetworkEnv key $ whenNetworkEnabled $ \withEnv ->
testCase "Moneybag alias is not affected by alias prefix" $ withEnv $ \env' ->
-- NB: we can't have 'withSystemTempDirectory' outside the test because
-- the outer IO action finishes before the test itself is run.
-- hence we have to change the tmpdir in env inside the test too
withSystemTempDirectory "tezos-client" \tmpdir -> do
let env = setTmpDir tmpdir env'
Moneybag moneybagAddress <- runClevelandT env $ view moneybagL
actualAlias <- Client.runMorleyClientM (neMorleyClientEnv env) $
Client.getAlias $ Client.AddressResolved moneybagAddress
actualAlias @=? aliasName
test_newAddress_with_prefix :: TestTree
test_newAddress_with_prefix =
setAliasPrefix "prefix" $
testScenario "`newAddress` prepends alias prefix to alias hint" $ scenario do
addr1 <- newAddress "alias"
addr2 <- resolveAddress "alias"
addr1 @== addr2