{-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} module Cardano.Metadata where import Data.Aeson (decode, eitherDecode, encode, object, (.=)) import Data.Text (Text) import qualified Money import Test.Hspec import Test.Tasty.Hspec import Text.RawString.QQ import Blockfrost.Types spec_metadata :: Spec spec_metadata = do it "parses tx meta sample" $ do eitherDecode txMetaSample `shouldBe` Right txMetaExpected it "parses tx meta JSON sample" $ do eitherDecode txMetaJSONSample `shouldBe` Right txMetaJSONExpected it "parses tx meta CBOR sample" $ do eitherDecode txMetaCBORSample `shouldBe` Right txMetaCBORExpected txMetaSample = [r| [ { "label": "1990", "cip10": null, "count": "1" }, { "label": "1967", "cip10": "nut.link metadata oracles registry", "count": "3" }, { "label": "1968", "cip10": "nut.link metadata oracles data points", "count": "16321" } ] |] txMetaExpected = [ TxMeta "1990" Nothing 1 , TxMeta "1967" (Just "nut.link metadata oracles registry") 3 , TxMeta "1968" (Just "nut.link metadata oracles data points") 16321 ] txMetaJSONSample = [r| [ { "tx_hash": "257d75c8ddb0434e9b63e29ebb6241add2b835a307aa33aedba2effe09ed4ec8", "json_metadata": { "ADAUSD": [ { "value": "0.10409800535729975", "source": "ergoOracles" } ] } }, { "tx_hash": "e865f2cc01ca7381cf98dcdc4de07a5e8674b8ea16e6a18e3ed60c186fde2b9c", "json_metadata": { "ADAUSD": [ { "value": "0.15409850555139935", "source": "ergoOracles" } ] } }, { "tx_hash": "4237501da3cfdd53ade91e8911e764bd0699d88fd43b12f44a1f459b89bc91be", "json_metadata": null } ] |] txMetaJSONExpected = let oracleMeta val = object [ "ADAUSD" .= [ object [ "value" .= (val :: Text) , "source" .= ("ergoOracles" :: Text) ] ] ] in [ TxMetaJSON "257d75c8ddb0434e9b63e29ebb6241add2b835a307aa33aedba2effe09ed4ec8" (Just $ oracleMeta "0.10409800535729975") , TxMetaJSON "e865f2cc01ca7381cf98dcdc4de07a5e8674b8ea16e6a18e3ed60c186fde2b9c" (Just $ oracleMeta "0.15409850555139935") , TxMetaJSON "4237501da3cfdd53ade91e8911e764bd0699d88fd43b12f44a1f459b89bc91be" Nothing ] txMetaCBORSample = [r| [ { "tx_hash": "257d75c8ddb0434e9b63e29ebb6241add2b835a307aa33aedba2effe09ed4ec8", "cbor_metadata": null }, { "tx_hash": "e865f2cc01ca7381cf98dcdc4de07a5e8674b8ea16e6a18e3ed60c186fde2b9c", "cbor_metadata": null }, { "tx_hash": "4237501da3cfdd53ade91e8911e764bd0699d88fd43b12f44a1f459b89bc91be", "cbor_metadata": "\\xa100a16b436f6d62696e6174696f6e8601010101010c", "metadata": "a100a16b436f6d62696e6174696f6e8601010101010c" } ] |] txMetaCBORExpected = [ TxMetaCBOR "257d75c8ddb0434e9b63e29ebb6241add2b835a307aa33aedba2effe09ed4ec8" Nothing , TxMetaCBOR "e865f2cc01ca7381cf98dcdc4de07a5e8674b8ea16e6a18e3ed60c186fde2b9c" Nothing , TxMetaCBOR "4237501da3cfdd53ade91e8911e764bd0699d88fd43b12f44a1f459b89bc91be" (Just "a100a16b436f6d62696e6174696f6e8601010101010c") ]