packages feed

cardano-addresses-4.0.0: test/Command/Address/PointerSpec.hs

{-# LANGUAGE FlexibleContexts #-}

module Command.Address.PointerSpec
    ( spec
    ) where

import Prelude

import Test.Hspec
    ( Spec, SpecWith, it, shouldBe, shouldContain )
import Test.Utils
    ( cli, describeCmd )

spec :: Spec
spec = describeCmd [ "address", "pointer" ] $ do
    specShelley (1,2,3) defaultAddrMainnet
        "addr1g9therz8fgux9ywdysrcpaclznyyvl23l2zfcery3f4m9qgpqgpsyefcgl"

    specShelley (1,2,3) defaultAddrTestnet
        "addr_test1gptherz8fgux9ywdysrcpaclznyyvl23l2zfcery3f4m9qgpqgpsa3x7je"

    specShelley (24157,177,42) defaultAddrMainnet
        "addr1g9therz8fgux9ywdysrcpaclznyyvl23l2zfcery3f4m9qvph3wczvf2sg4yzx"

    specShelley (24157,177,42) defaultAddrTestnet
        "addr_test1gptherz8fgux9ywdysrcpaclznyyvl23l2zfcery3f4m9qvph3wczvf2lxgdw5"

    specMalformed ("💩","💩","💩") defaultAddrMainnet

    specMalformedAddress
        "Ae2tdPwUPEYz6ExfbWubiXPB6daUuhJxikMEb4eXRp5oKZBKZwrbJ2k7EZe"

    specMalformedAddress
        "DdzFFzCqrhsf6hiTYkK5gBAhVDwg3SiaHiEL9wZLYU3WqLUpx6DP\
        \5ZRJr4rtNRXbVNfk89FCHCDR365647os9AEJ8MKZNvG7UKTpythG"

    specInvalidAddress
        "addr1qdu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5ewvxwdrt\
        \70qlcpeeagscasafhffqsxy36t90ldv06wqrk2q5ggg4z"


specShelley :: (Int, Int, Int) -> String -> String -> SpecWith ()
specShelley (a,b,c) addr want = it ("golden shelley (pointer) " <> show (a,b,c)) $ do
    out <- cli [ "address", "pointer", show a, show b, show c ] addr
    out `shouldBe` want

specMalformed :: (String, String, String) -> String -> SpecWith ()
specMalformed (a,b,c) addr = it ("malformed pointer " <> unwords [a,b,c]) $ do
    (out, err) <- cli [ "address", "pointer", a, b, c ] addr
    out `shouldBe` ""
    err `shouldContain` "cannot parse value"
    err `shouldContain` "Usage"

specMalformedAddress :: String -> SpecWith ()
specMalformedAddress addr = it ("invalid address " <> addr) $ do
    (out, err) <- cli [ "address", "pointer", "0", "0", "0" ] addr
    out `shouldBe` ""
    err `shouldContain` "Bech32 error"

specInvalidAddress :: String -> SpecWith ()
specInvalidAddress addr = it ("invalid address " <> addr) $ do
    (out, err) <- cli [ "address", "pointer", "0", "0", "0" ] addr
    out `shouldBe` ""
    err `shouldContain` "Only payment addresses can be extended"

defaultAddrMainnet :: String
defaultAddrMainnet =
    "addr1v9therz8fgux9ywdysrcpaclznyyvl23l2zfcery3f4m9qgx2curq"

defaultAddrTestnet :: String
defaultAddrTestnet =
    "addr_test1vptherz8fgux9ywdysrcpaclznyyvl23l2zfcery3f4m9qgazvqv9"