cardano-addresses-4.0.0: test/Command/Address/RewardSpec.hs
{-# LANGUAGE FlexibleContexts #-}
module Command.Address.RewardSpec
( spec
) where
import Prelude
import Test.Hspec
( Spec, SpecWith, it, shouldBe, shouldContain )
import Test.Utils
( cli, describeCmd )
spec :: Spec
spec = describeCmd [ "address", "stake" ] $ do
specShelley defaultPhrase "1852H/1815H/0H/2/0" 0
"stake_test1ura3dk68y6echdmfmnvm8mej8u5truwv8ufmv830w5a45tcsfhtt2"
specShelley defaultPhrase "1852H/1815H/0H/2/0" 3
"stake1u0a3dk68y6echdmfmnvm8mej8u5truwv8ufmv830w5a45tchw5z0e"
specShelleyFromKeyHash defaultPhrase "1852H/1815H/0H/2/0" 0
"stake_test1ura3dk68y6echdmfmnvm8mej8u5truwv8ufmv830w5a45tcsfhtt2"
specShelleyFromKeyHash defaultPhrase "1852H/1815H/0H/2/0" 3
"stake1u0a3dk68y6echdmfmnvm8mej8u5truwv8ufmv830w5a45tchw5z0e"
specMalformedNetwork "💩"
specInvalidNetwork "42"
specShelley :: [String] -> String -> Int -> String -> SpecWith ()
specShelley 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", "stake", "--network-tag", show networkTag ]
out `shouldBe` want
specShelleyFromKeyHash :: [String] -> String -> Int -> 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", "stake", "--network-tag", show 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", "stake", "--network-tag", networkTag ]
out `shouldBe` ""
err `shouldContain` "Invalid network tag"
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", "stake", "--network-tag", networkTag ]
out `shouldBe` ""
err `shouldContain` "Invalid network tag"
defaultPhrase :: [String]
defaultPhrase =
[ "pole", "pulse", "wolf", "blame", "chronic"
, "ship", "vivid", "tree", "small", "onion"
, "host", "accident", "burden", "lazy", "swarm"
]