packages feed

morley-0.4.0: test/Test/Tezos/Address.hs

-- | Tests for 'Tezos.Address'.

module Test.Tezos.Address
  ( test_Roundtrip
  , test_parseAddress
  ) where

import Test.Hspec (shouldSatisfy)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase)

import Tezos.Address (Address, formatAddress, parseAddress)

import Test.Util.QuickCheck (ShowThroughBuild(..), aesonRoundtrip, roundtripTestSTB)

test_Roundtrip :: [TestTree]
test_Roundtrip =
    [ testGroup "parse . format ≡ pure"
      [ roundtripTestSTB formatAddress parseAddress ]
    , testGroup "JSON encoding/deconding"
      [ aesonRoundtrip @Address ]
    ]

test_parseAddress :: [TestTree]
test_parseAddress =
  [ testCase "Successfully parses valid sample data" $
    forM_ sampleAddresses (\a -> bimap STB STB (parseAddress a) `shouldSatisfy` isRight)
  , testCase "Fails to parse invalid data" $ do
    forM_ invalidAddresses (\a -> bimap STB STB (parseAddress a) `shouldSatisfy` isLeft)
  ]
  where
    sampleAddresses =
      [ "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU"
      , "tz1Wit2PqodvPeuRRhdQXmkrtU8e8bRYZecd"
      , "tz2EfqCbLmpfv7mNiLcMmhxAwdgHtPTcwR4W"
      , "tz2Darj3LyQzekU98ZK8diHvuyn1YYjcHpc6"
      , "tz3UoffC7FG7zfpmvmjUmUeAaHvzdcUvAj6r"
      , "tz3NExpXn9aPNZPorRE4SdjJ2RGrfbJgMAaV"
      , "KT1G4hcQj2STN86GwC1XAkPtwPPhgfPKuE45"
      , "KT1QbdJ7M7uAQZwLpvzerUyk7LYkJWDL7eDh"
      ]
    invalidAddresses =
      [ ""
      , "1"
      -- These are slightly modified versions of some valid addresses above.
      , "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUZU"
      , "tz2darj3LyQzekU98ZK8diHvuyn1YYjcHpc6"
      , "tz3UoffC8FG7zfpmvmjUmUeAaHvzdcUvAj6r"
      , "KT1G4hcQj2STN86GwC1XAkPtwPPhgfPKuE46"
      ]