diff --git a/hydra-node/test/Hydra/Chain/Direct/ContractSpec.hs b/hydra-node/test/Hydra/Chain/Direct/ContractSpec.hs index 2d0de39d632..d8634395e02 100644 --- a/hydra-node/test/Hydra/Chain/Direct/ContractSpec.hs +++ b/hydra-node/test/Hydra/Chain/Direct/ContractSpec.hs @@ -58,6 +58,7 @@ import Hydra.Ledger.Cardano ( TxBodyScriptData (TxBodyNoScriptData, TxBodyScriptData), TxIn, TxOut (..), + TxOutDatum (..), Utxo, Utxo' (Utxo), adaOnly, @@ -89,6 +90,7 @@ import Hydra.Ledger.Cardano ( toCtxUTxOTxOut, toLedgerTxIn, toLedgerTxOut, + toPlutusData, txOutValue, unsafeBuildTransaction, utxoPairs, @@ -125,6 +127,7 @@ import Test.QuickCheck ( oneof, property, suchThat, + vector, (===), ) import Test.QuickCheck.Instances () @@ -422,6 +425,7 @@ healthyCommitOutput party committed = data CollectComMutation = MutateOpenOutputValue + | MutateOpenUtxoHash deriving (Generic, Show, Enum, Bounded) genCollectComMutation :: (CardanoTx, Utxo) -> Gen SomeMutation @@ -430,6 +434,21 @@ genCollectComMutation (tx, _utxo) = [ SomeMutation MutateOpenOutputValue . ChangeOutput 0 <$> do mutatedValue <- (mkTxOutValue <$> genValue) `suchThat` (/= collectComOutputValue) pure $ TxOut collectComOutputAddress mutatedValue collectComOutputDatum + , SomeMutation MutateOpenUtxoHash . ChangeOutput 0 <$> do + mutatedUtxoHash <- BS.pack <$> vector 32 + case collectComOutputDatum of + TxOutDatumNone -> error "unexpected empty head datum" + (TxOutDatumHash _sdsie _ha) -> error "unexpected hash-only datum" + (TxOutDatum _sdsie sd) -> + case fromData $ toPlutusData sd of + Nothing -> error "Invalid data" + (Just Head.Open{parties}) -> + pure $ + TxOut + collectComOutputAddress + collectComOutputValue + (mkTxOutDatum Head.Open{parties, Head.utxoHash = toBuiltin mutatedUtxoHash}) + (Just st) -> error $ "unexpected state " <> show st ] where TxOut collectComOutputAddress collectComOutputValue collectComOutputDatum =