{-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} module APISpec where import Data.Aeson (decode, eitherDecode, encode) import Data.Text (Text) import qualified Money import Test.Hspec import Test.Tasty.Hspec import Text.RawString.QQ import Blockfrost.Types spec_sample :: Spec spec_sample = do it "parses urlVersion sample" $ do decode urlVersionSample `shouldBe` Just (URLVersion "https://blockfrost.io/" "0.1.0") it "parses health sample" $ do decode healthSample `shouldBe` Just (Healthy True) it "parses server time sample" $ do decode serverTimeSample `shouldBe` Just (ServerTime 1603400958.947) it "parses metrics sample" $ do eitherDecode metricsSample `shouldBe` Right metricsExpected it "parses metrics endpoints sample" $ do eitherDecode metricsEndpointsSample `shouldBe` Right metricsEndpointsExpected urlVersionSample = [r| { "url": "https://blockfrost.io/", "version": "0.1.0" } |] healthSample = [r| { "is_healthy": true } |] serverTimeSample = [r| { "server_time": 1603400958947 } |] metricsSample = [r| [ { "time": 1612543884, "calls": 42 }, { "time": 1614523884, "calls": 6942 } ] |] metricsExpected = [ Metric 1612543884 42 , Metric 1614523884 6942 ] metricsEndpointsSample = [r| [ { "time": 1612543814, "calls": 182, "endpoint": "block" }, { "time": 1612543814, "calls": 42, "endpoint": "epoch" }, { "time": 1612543812, "calls": 775, "endpoint": "block" }, { "time": 1612523884, "calls": 4, "endpoint": "epoch" }, { "time": 1612553884, "calls": 89794, "endpoint": "block" } ] |] metricsEndpointsExpected :: [(Text, Metric)] metricsEndpointsExpected = [ ("block", Metric 1612543814 182) , ("epoch", Metric 1612543814 42) , ("block", Metric 1612543812 775) , ("epoch", Metric 1612523884 4) , ("block", Metric 1612553884 89794) ]