cardano-addresses-4.0.0: test/Command/Address/PaymentSpec.hs
{-# LANGUAGE FlexibleContexts #-}
module Command.Address.PaymentSpec
( spec
) where
import Prelude
import Test.Hspec
( Spec, SpecWith, it, shouldBe, shouldContain )
import Test.Utils
( cli, describeCmd )
spec :: Spec
spec = describeCmd [ "address", "payment" ] $ do
specShelleyFromXPub defaultPhrase "1852H/1815H/0H/0/0" "0"
"addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv"
specShelleyFromXPub defaultPhrase "1852H/1815H/0H/0/0" "3"
"addr1vdu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg0m9a08"
specShelleyFromXPub defaultPhrase "1852H/1815H/0H/0/0" "testnet"
"addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv"
specShelleyFromXPub defaultPhrase "1852H/1815H/0H/0/0" "mainnet"
"addr1v9u5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg0kvk0f"
specShelleyFromPub defaultPhrase "1852H/1815H/0H/0/0" "0"
"addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv"
specShelleyFromPub defaultPhrase "1852H/1815H/0H/0/0" "3"
"addr1vdu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg0m9a08"
specShelleyFromPub defaultPhrase "1852H/1815H/0H/0/0" "testnet"
"addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv"
specShelleyFromPub defaultPhrase "1852H/1815H/0H/0/0" "mainnet"
"addr1v9u5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg0kvk0f"
specShelleyFromKeyHash defaultPhrase "1852H/1815H/0H/0/0" "0"
"addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv"
specShelleyFromKeyHash defaultPhrase "1852H/1815H/0H/0/0" "3"
"addr1vdu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg0m9a08"
specShelleyFromKeyHash defaultPhrase "1852H/1815H/0H/0/0" "testnet"
"addr_test1vpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg57c2qv"
specShelleyFromKeyHash defaultPhrase "1852H/1815H/0H/0/0" "mainnet"
"addr1v9u5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5eg0kvk0f"
specMalformedNetwork "💩"
specInvalidNetwork "42"
specInvalidNetwork "staging"
specShelleyFromXPub :: [String] -> String -> String -> String -> SpecWith ()
specShelleyFromXPub phrase path networkTag want = it ("golden shelley (payment) " <> path) $ do
out <- cli [ "key", "from-recovery-phrase", "shelley" ] (unwords phrase)
>>= cli [ "key", "child", path ]
>>= cli [ "key", "public", "--with-chain-code" ]
>>= cli [ "address", "payment", "--network-tag", networkTag ]
out `shouldBe` want
specShelleyFromPub :: [String] -> String -> String -> String -> SpecWith ()
specShelleyFromPub phrase path networkTag want = it ("golden shelley (payment) " <> path) $ do
out <- cli [ "key", "from-recovery-phrase", "shelley" ] (unwords phrase)
>>= cli [ "key", "child", path ]
>>= cli [ "key", "public", "--without-chain-code" ]
>>= cli [ "address", "payment", "--network-tag", networkTag ]
out `shouldBe` want
specShelleyFromKeyHash :: [String] -> String -> String -> String -> SpecWith ()
specShelleyFromKeyHash phrase path networkTag want = it ("golden shelley (payment) " <> path) $ do
out <- cli [ "key", "from-recovery-phrase", "shelley" ] (unwords phrase)
>>= cli [ "key", "child", path ]
>>= cli [ "key", "public", "--with-chain-code" ]
>>= cli [ "key", "hash" ]
>>= cli [ "address", "payment", "--network-tag", networkTag ]
out `shouldBe` want
specMalformedNetwork :: String -> SpecWith ()
specMalformedNetwork networkTag = it ("malformed network " <> networkTag) $ do
(out, err) <- cli [ "key", "from-recovery-phrase", "shelley" ] (unwords defaultPhrase)
>>= cli [ "key", "public", "--with-chain-code" ]
>>= cli [ "address", "payment", "--network-tag", networkTag ]
out `shouldBe` ""
err `shouldContain` "Invalid network tag. Must be an integer value or one of the allowed keywords:"
err `shouldContain` "Usage"
specInvalidNetwork :: String -> SpecWith ()
specInvalidNetwork networkTag = it ("invalid network " <> networkTag) $ do
(out, err) <- cli [ "key", "from-recovery-phrase", "shelley" ] (unwords defaultPhrase)
>>= cli [ "key", "public", "--with-chain-code" ]
>>= cli [ "address", "payment", "--network-tag", networkTag ]
out `shouldBe` ""
err `shouldContain` "Invalid network tag."
defaultPhrase :: [String]
defaultPhrase =
[ "art", "forum", "devote", "street", "sure"
, "rather", "head", "chuckle", "guard", "poverty"
, "release", "quote", "oak", "craft", "enemy"
]