|
1 | 1 | module Coop.Plutus.Test (spec) where |
2 | 2 |
|
3 | 3 | import Plutarch.Prelude (ClosedTerm, PBool (PTrue), PEq ((#==)), pconstant, pconstantData, (#)) |
4 | | -import Test.Hspec (Expectation, Spec, describe, shouldBe) |
| 4 | +import Test.Hspec (Expectation, Spec, describe, runIO, shouldBe) |
5 | 5 | import Test.Hspec.QuickCheck (prop) |
6 | 6 | import Test.QuickCheck (NonEmptyList (getNonEmpty), Positive (getPositive), choose, forAll, generate) |
7 | 7 |
|
8 | | -import Coop.Plutus (certV, fsV, mkAuthMp, mkCertMp, mkFsMp, pmustSpendAtLeastAa) |
| 8 | +import Codec.Serialise (deserialiseOrFail) |
| 9 | +import Coop.Plutus (certV, exampleConsumer, fsV, mkAuthMp, mkCertMp, mkFsMp, pmustSpendAtLeastAa) |
9 | 10 | import Coop.Plutus.Aux (hashTxInputs, pmustBurnOwnSingletonValue) |
10 | | -import Coop.Plutus.Test.Generators (distribute, genAaInputs, genCertRdmrAc, genCorrectAuthMpBurningCtx, genCorrectAuthMpMintingCtx, genCorrectCertMpBurningCtx, genCorrectCertMpMintingCtx, genCorrectCertVSpendingCtx, genCorrectFsMpBurningCtx, genCorrectFsMpMintingCtx, genCorrectFsVSpendingCtx, genCorrectMustBurnOwnSingletonValueCtx, genCorruptAuthMpBurningCtx, genCorruptAuthMpMintingCtx, genCorruptCertMpBurningCtx, genCorruptCertMpMintingCtx, genCorruptCertVSpendingCtx, genCorruptFsMpBurningCtx, genCorruptFsMpMintingCtx, genCorruptFsVSpendingCtx, genCorruptMustBurnOwnSingletonValueCtx, mkScriptContext) |
| 11 | +import Coop.Plutus.Test.Generators (distribute, genAaInputs, genCertRdmrAc, genCorrectAuthMpBurningCtx, genCorrectAuthMpMintingCtx, genCorrectCertMpBurningCtx, genCorrectCertMpMintingCtx, genCorrectCertVSpendingCtx, genCorrectConsumerCtx, genCorrectFsMpBurningCtx, genCorrectFsMpMintingCtx, genCorrectFsVSpendingCtx, genCorrectMustBurnOwnSingletonValueCtx, genCorruptAuthMpBurningCtx, genCorruptAuthMpMintingCtx, genCorruptCertMpBurningCtx, genCorruptCertMpMintingCtx, genCorruptCertVSpendingCtx, genCorruptFsMpBurningCtx, genCorruptFsMpMintingCtx, genCorruptFsVSpendingCtx, genCorruptMustBurnOwnSingletonValueCtx, mkScriptContext) |
11 | 12 | import Coop.Plutus.Types (PAuthMpParams, PCertMpParams, PFsMpParams) |
12 | 13 | import Coop.Types (AuthMpParams (AuthMpParams), AuthMpRedeemer (AuthMpBurn, AuthMpMint), AuthParams (AuthParams), CertMpParams (CertMpParams), CertMpRedeemer (CertMpBurn, CertMpMint), FsMpParams (FsMpParams), FsMpRedeemer (FsMpBurn, FsMpMint)) |
| 14 | +import Data.ByteString.Lazy qualified as LB |
13 | 15 | import Data.Foldable (Foldable (fold)) |
14 | 16 | import Data.Map qualified as Map |
15 | 17 | import Data.Set qualified as Set |
16 | 18 | import Data.Text (Text, unpack) |
17 | 19 | import Plutarch (Config (Config, tracingMode), TracingMode (DetTracing), compile, pcon, printScript) |
| 20 | +import Plutarch.Api.V1 (PCurrencySymbol) |
18 | 21 | import Plutarch.Builtin (PIsData (pdataImpl)) |
19 | 22 | import Plutarch.Evaluate (evalScript) |
20 | 23 | import Plutarch.Test (pfails, psucceeds) |
21 | 24 | import PlutusLedgerApi.V1.Address (scriptHashAddress) |
22 | 25 | import PlutusLedgerApi.V1.Value (AssetClass, TokenName (TokenName), assetClass, currencySymbol) |
23 | | -import PlutusLedgerApi.V2 (Address, CurrencySymbol, Script, ScriptPurpose (Minting), ValidatorHash (ValidatorHash), toData) |
| 26 | +import PlutusLedgerApi.V2 (Address, CurrencySymbol, Script, ScriptPurpose (Minting), ValidatorHash (ValidatorHash), dataToBuiltinData, toData) |
| 27 | +import PlutusTx (Data) |
24 | 28 | import PlutusTx.Builtins.Class (stringToBuiltinByteString) |
25 | 29 |
|
26 | 30 | coopAc :: AssetClass |
@@ -265,6 +269,19 @@ spec = do |
265 | 269 | # pconstant (toData ()) |
266 | 270 | # pconstant ctx |
267 | 271 | ) |
| 272 | + describe "@Consumer" $ do |
| 273 | + samplePd <- runIO $ readPlutusDataCbor "resources/sample.pd.cbor" |
| 274 | + describe "should-succeed" $ do |
| 275 | + prop "reference a fact statement" $ |
| 276 | + forAll (genCorrectConsumerCtx fsCs (dataToBuiltinData samplePd)) $ |
| 277 | + \ctx -> |
| 278 | + psucceeds |
| 279 | + ( exampleConsumer |
| 280 | + # pconstant @PCurrencySymbol fsCs |
| 281 | + # pconstant (toData ()) |
| 282 | + # pconstant (toData ()) |
| 283 | + # pconstant ctx |
| 284 | + ) |
268 | 285 |
|
269 | 286 | _plog :: ClosedTerm a -> Expectation |
270 | 287 | _plog p = _ptraces' p id [] |
@@ -298,3 +315,9 @@ pshouldBe x y = do |
298 | 315 | pscriptShouldBe :: Script -> Script -> Expectation |
299 | 316 | pscriptShouldBe x y = |
300 | 317 | printScript x `shouldBe` printScript y |
| 318 | + |
| 319 | +readPlutusDataCbor :: FilePath -> IO Data |
| 320 | +readPlutusDataCbor fname = do |
| 321 | + cborBytes <- LB.readFile fname |
| 322 | + let errOrDecoded = deserialiseOrFail @Data cborBytes |
| 323 | + either (\err -> error $ "File " <> fname <> " can't be parsed into PlutusData CBOR: " <> show err) return errOrDecoded |
0 commit comments