/
OgmiosDatumCache.purs
63 lines (56 loc) · 2.19 KB
/
OgmiosDatumCache.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
module Test.Ctl.OgmiosDatumCache
( suite
) where
import Prelude
import Aeson (caseAesonArray, decodeAeson, encodeAeson)
import Contract.Address (ByteArray)
import Control.Monad.Error.Class (class MonadThrow)
import Ctl.Internal.Hashing (datumHash)
import Ctl.Internal.Test.TestPlanM (TestPlanM)
import Ctl.Internal.Types.Datum (Datum(Datum))
import Ctl.Internal.Types.PlutusData (PlutusData)
import Data.Either (Either(Left, Right))
import Data.Newtype (unwrap)
import Data.Traversable (for_)
import Effect.Aff (Aff)
import Effect.Class (class MonadEffect)
import Effect.Exception (Error)
import Mote (group, skip, test)
import Test.Ctl.Utils (errEither, errMaybe, readAeson)
import Test.Spec.Assertions (shouldEqual)
suite :: TestPlanM (Aff Unit) Unit
suite = group "Ogmios Datum Cache tests" $ do
-- TODO Move
skip $ test
"Plutus data samples should satisfy the Aeson roundtrip test (FIXME: \
\https://github.com/mlabs-haskell/purescript-aeson/issues/7)"
plutusDataToFromAesonTest
test "Plutus data samples should have a compatible hash" plutusDataHashingTest
-- TODO Add GetTxByHash
readPlutusDataSamples
:: forall (m :: Type -> Type)
. MonadEffect m
=> m (Array { hash :: ByteArray, plutusData :: PlutusData })
readPlutusDataSamples = do
errEither <<< decodeAeson =<< readAeson
"./fixtures/test/ogmios-datum-cache/plutus-data-samples.json"
plutusDataToFromAesonTest
:: forall (m :: Type -> Type). MonadEffect m => MonadThrow Error m => m Unit
plutusDataToFromAesonTest = do
pdsAes <- readAeson
"./fixtures/test/ogmios-datum-cache/plutus-data-samples.json"
aess <- errEither <<< caseAesonArray (Left "Expected a Json array") Right $
pdsAes
for_ aess \aes -> do
(sample :: { hash :: ByteArray, plutusData :: PlutusData }) <- errEither $
decodeAeson aes
let aes' = encodeAeson sample
aes `shouldEqual` aes'
plutusDataHashingTest
:: forall (m :: Type -> Type). MonadEffect m => MonadThrow Error m => m Unit
plutusDataHashingTest = do
plutusDataSamples <- readPlutusDataSamples
let elems = plutusDataSamples
for_ elems \{ hash, plutusData } -> do
hash' <- errMaybe "Couldn't hash the datum" <<< datumHash $ Datum plutusData
hash `shouldEqual` unwrap hash'