cleveland-0.1.1: morley-test/Test/Tezos/Address.hs
-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA
-- | Tests for 'Morley.Tezos.Address'.
module Test.Tezos.Address
( test_Roundtrip
, test_parseAddress
, test_decodeAddress
, unit_ta
) where
import Test.HUnit (Assertion, (@?=))
import Test.Hspec (shouldSatisfy)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase)
import Hedgehog.Gen.Tezos.Address (genAddress)
import Morley.Tezos.Address (formatAddress, parseAddress, ta)
import Test.Cleveland.Util (parseAddressFromHex)
import Test.Util.Hedgehog (ShowThroughBuild(..), aesonRoundtrip, roundtripTreeSTB)
test_Roundtrip :: [TestTree]
test_Roundtrip =
[ testGroup "parse . format ≡ pure"
[ roundtripTreeSTB genAddress formatAddress parseAddress ]
, testGroup "JSON encoding/deconding"
[ aesonRoundtrip genAddress ]
]
test_parseAddress :: [TestTree]
test_parseAddress =
[ testCase "Successfully parses valid sample data in canonical form" $
forM_ sampleAddresses (\(a, _) -> bimap STB STB (parseAddress a) `shouldSatisfy` isRight)
, testCase "Successfully parses valid sample data in raw byte form" $
forM_ sampleAddresses (\(_, b) -> bimap STB STB (parseAddressFromHex b) `shouldSatisfy` isRight)
, testCase "Parsed addresses are equivalent in canonical and raw byte form" $
forM_ sampleAddresses (\(a, b) -> (STB . unsafe $ parseAddressFromHex b) @?= (STB . unsafe $ parseAddress a))
, testCase "Fails to parse invalid data" $ do
forM_ invalidAddresses (\a -> bimap STB STB (parseAddress a) `shouldSatisfy` isLeft)
]
test_decodeAddress :: [TestTree]
test_decodeAddress = mconcat
[ [ testCase ("Successfully encodes " <> toString b)
(formatAddress (unsafe $ parseAddressFromHex b) @?= a) | (a, b) <- sampleAddresses ]
, [ testCase ("Fails to parse invalid address " <> toString a)
(parseAddressFromHex a `shouldSatisfy` isLeft) | a <- invalidRawAddresses ]
]
unit_ta :: Assertion
unit_ta = do
[ta|tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU|]
@?= unsafe (parseAddress "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU")
[ta|tz1Wit2PqodvPeuRRhdQXmkrtU8e8bRYZecd|]
@?= unsafe (parseAddress "tz1Wit2PqodvPeuRRhdQXmkrtU8e8bRYZecd")
[ta|KT1G4hcQj2STN86GwC1XAkPtwPPhgfPKuE45|]
@?= unsafe (parseAddress "KT1G4hcQj2STN86GwC1XAkPtwPPhgfPKuE45")
[ta|KT1QbdJ7M7uAQZwLpvzerUyk7LYkJWDL7eDh|]
@?= unsafe (parseAddress "KT1QbdJ7M7uAQZwLpvzerUyk7LYkJWDL7eDh")
sampleAddresses :: [(Text, Text)]
sampleAddresses =
[ ("tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUzU", "0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6")
, ("tz1Wit2PqodvPeuRRhdQXmkrtU8e8bRYZecd", "000079943a60100e0394ac1c8f6ccfaeee71ec9c2d94")
, ("tz2EfqCbLmpfv7mNiLcMmhxAwdgHtPTcwR4W", "000145b5e7d31bf6612e61ebfa7a6d929ce7800a55a4")
, ("tz2Darj3LyQzekU98ZK8diHvuyn1YYjcHpc6", "000139ccf913874519b2d20917bf5f2de537420d2726")
, ("tz3UoffC7FG7zfpmvmjUmUeAaHvzdcUvAj6r", "00025cfa532f50de3e12befc0ad21603835dd7698d35")
, ("tz3NExpXn9aPNZPorRE4SdjJ2RGrfbJgMAaV", "000214fa2b36471a318d2f244997c48c5f23b8001eed")
, ("KT1G4hcQj2STN86GwC1XAkPtwPPhgfPKuE45", "01521139f84791537d54575df0c74a8084cc68861c00")
, ("KT1QbdJ7M7uAQZwLpvzerUyk7LYkJWDL7eDh", "01afab866e7f1e74f9bba388d66b246276ce50bf4700")
]
invalidRawAddresses :: [Text]
invalidRawAddresses =
[ ""
, "qehrwu"
, "0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd"
, "0000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6a"
, "0000dac9f52543da1aed0bc1d6b46bf7c10db7014cds"
, "1000dac9f52543da1aed0bc1d6b46bf7c10db7014cd6"
]
invalidAddresses :: [Text]
invalidAddresses =
[ ""
, "1"
-- These are slightly modified versions of some valid addresses above.
, "tz1faswCTDciRzE4oJ9jn2Vm2dvjeyA9fUZU"
, "tz2darj3LyQzekU98ZK8diHvuyn1YYjcHpc6"
, "tz3UoffC8FG7zfpmvmjUmUeAaHvzdcUvAj6r"
, "KT1G4hcQj2STN86GwC1XAkPtwPPhgfPKuE46"
]