-- 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