-- 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" ]