cardano-addresses-4.0.0: test/Command/Address/BootstrapSpec.hs
{-# LANGUAGE FlexibleContexts #-}
module Command.Address.BootstrapSpec
( spec
) where
import Prelude
import Test.Hspec
( Spec, SpecWith, it, shouldBe, shouldContain )
import Test.Utils
( cli, describeCmd )
spec :: Spec
spec = describeCmd [ "address", "bootstrap" ] $ do
specIcarus defaultPhrase "44H/1815H/0H/0/0" "764824073"
"Ae2tdPwUPEYz6ExfbWubiXPB6daUuhJxikMEb4eXRp5oKZBKZwrbJ2k7EZe"
specIcarus defaultPhrase "44H/1815H/0H/0/1" "764824073"
"Ae2tdPwUPEZCJUCuVgnysar8ZJeyKuhjXU35VNgKMMTcXWmS9zzYycmwKa4"
specIcarus defaultPhrase "44H/1815H/0H/0/2" "764824073"
"Ae2tdPwUPEZFJtMH1m5HvsaQZrmgLcVcyuk5TxYtdRHZFo8yV7yEnnJyqTs"
specIcarus defaultPhrase "44H/1815H/0H/0/0" "mainnet"
"Ae2tdPwUPEYz6ExfbWubiXPB6daUuhJxikMEb4eXRp5oKZBKZwrbJ2k7EZe"
specIcarus defaultPhrase "44H/1815H/0H/0/1" "mainnet"
"Ae2tdPwUPEZCJUCuVgnysar8ZJeyKuhjXU35VNgKMMTcXWmS9zzYycmwKa4"
specIcarus defaultPhrase "44H/1815H/0H/0/2" "mainnet"
"Ae2tdPwUPEZFJtMH1m5HvsaQZrmgLcVcyuk5TxYtdRHZFo8yV7yEnnJyqTs"
specByron defaultPhrase "0H/0H" "764824073"
"DdzFFzCqrhsf6hiTYkK5gBAhVDwg3SiaHiEL9wZLYU3WqLUpx6DP\
\5ZRJr4rtNRXbVNfk89FCHCDR365647os9AEJ8MKZNvG7UKTpythG"
specByron defaultPhrase "0H/1H" "764824073"
"DdzFFzCqrhssdAorKQ7hGGPgNS3akoiuNG6YY7bb11hYrm1x716e\
\akbz3yUppMS6X4t8WgM3Nx9CwjqZk3oNgm8s9yooJTs5AS7ptFT6"
specByron defaultPhrase "0H/2H" "764824073"
"DdzFFzCqrht4YH5irxboFprowLYgJLddd2iCQt5mrVyQS5CZFMeZ\
\bQtzJsHf4a6YQhPPNxtqBVP3Drsy1tdjecqq1FK1m2oAR5J8EcVe"
specByron defaultPhrase "0H/0H" "mainnet"
"DdzFFzCqrhsf6hiTYkK5gBAhVDwg3SiaHiEL9wZLYU3WqLUpx6DP\
\5ZRJr4rtNRXbVNfk89FCHCDR365647os9AEJ8MKZNvG7UKTpythG"
specByron defaultPhrase "0H/1H" "mainnet"
"DdzFFzCqrhssdAorKQ7hGGPgNS3akoiuNG6YY7bb11hYrm1x716e\
\akbz3yUppMS6X4t8WgM3Nx9CwjqZk3oNgm8s9yooJTs5AS7ptFT6"
specByron defaultPhrase "0H/2H" "mainnet"
"DdzFFzCqrht4YH5irxboFprowLYgJLddd2iCQt5mrVyQS5CZFMeZ\
\bQtzJsHf4a6YQhPPNxtqBVP3Drsy1tdjecqq1FK1m2oAR5J8EcVe"
specInvalidNetwork "💩"
specIcarus :: [String] -> String -> String -> String -> SpecWith ()
specIcarus phrase path networkTag want = it ("golden icarus " <> path <> " (" <> networkTag <> ")") $ do
out <- cli [ "key", "from-recovery-phrase", "icarus" ] (unwords phrase)
>>= cli [ "key", "child", path ]
>>= cli [ "key", "public", "--with-chain-code" ]
>>= cli [ "address", "bootstrap", "--network-tag", networkTag ]
out `shouldBe` want
specByron :: [String] -> String -> String -> String -> SpecWith ()
specByron phrase path networkTag want = it ("golden byron " <> path <> " (" <> networkTag <> ")") $ do
rootPrv <- cli [ "key", "from-recovery-phrase", "byron" ] (unwords phrase)
rootPub <- cli [ "key", "public", "--with-chain-code" ] rootPrv
out <- cli [ "key", "child", path ] rootPrv
>>= cli [ "key", "public", "--with-chain-code" ]
>>= cli [ "address", "bootstrap", "--root", rootPub, "--network-tag", networkTag, path ]
out `shouldBe` want
specInvalidNetwork :: String -> SpecWith ()
specInvalidNetwork networkTag = it ("invalid network " <> networkTag) $ do
(out, err) <- cli [ "address", "bootstrap", "--network-tag", networkTag ] ""
out `shouldBe` ""
err `shouldContain` "Invalid network tag. Must be an integer value or one of the allowed keywords:"
err `shouldContain` "Usage"
defaultPhrase :: [String]
defaultPhrase =
[ "ghost", "buddy", "neutral", "broccoli", "face", "rack"
, "relief", "odor", "swallow", "real", "once", "ecology"
]