Unit Testing Transaction

The parsed transaction can be used for inspection, primarily in the scenario of unit testing the transaction-building process.

To obtain the TxTester:

let mut tx_tester = tx_parser.to_tester();

Interpret result

After adding checks, the success case:

assert!(tx_tester.success()); // passing
 
let error_msg = tx_tester.errors();
println!(error_msg) // "No errors"

If case there is an error, there would be tracing about where it fails the checks:

println!("Errors: {:?}", tx_tester.errors());

// For example, failing at finding inline datum at outputs
Errors: "[Error - outputs_inline_datum_exist]: No outputs with inline datum matching: d905039fd8799fd8799f5041bfc7325343428683bbd0b94a4da41cd8799f581ce1197f10e85bc4a3a812e34e22339e1df56b7fb6386a9510d7a304ffffd8799f581c7c87b6b5a0963af3eadb107da2ac4e1d34747a4df363858b649aa845ffffffa140a1401a00989680ff"

Testing inputs

Testing inputs starts with locating the inputs you want to test. The filtering will not reset until the filtering methods are called again.

  • all_inputs - not apply filters

  • inputs_at - filtering inputs with address

  • inputs_with - filtering inputs with token

  • inputs_with_policy - filtering inputs with policy id

  • inputs_at_with - filtering inputs with address and token

  • inputs_at_with_policy - filtering inputs with address and policy id

Then it comes with the checks:

  • inputs_value - check the aggregated value of filtered inputs

  • inputs_inline_datum_exist - check whether any of the filtered inputs with the inline datum

Example

Testing outputs

Testing outputs starts with locating the outputs you want to test. The filtering will not reset until the filtering methods are called again.

  • all_outputs - not apply filters

  • outputs_at - filtering outputs with address

  • outputs_with - filtering outputs with token

  • outputs_with_policy - filtering outputs with policy id

  • outputs_at_with - filtering outputs with address and token

  • outputs_at_with_policy - filtering outputs with address and policy id

Then it comes with the checks:

  • outputs_value - check the aggregated value of filtered outputs

  • outputs_inline_datum_exist - check whether any of the filtered outputs with the inline datum

Example

Testing mints

Testing mints with below APIs:

  • token_minted - checks if a specific token is minted in the transaction

  • only_token_minted - checks if a specific token is minted in the transaction and that it is the only mint

  • policy_only_minted_token - checks if a specific token is minted in the transaction, ensuring that it is the only mint for the given policy ID

  • check_policy_only_burn - checks if a specific policy ID is burned in the transaction, ensuring that it is the only minting (i.e. burning item).

Testing time

Testing time with below APIs:

  • valid_after - checks if the transaction is valid after a specified timestamp

  • valid_before - checks if the transaction is valid before a specified timestamp

Testing signature

Testing whether the signature is required in the transaction with below APIs:

  • key_signed - checks if a specific key is signed in the transaction

  • one_of_keys_signed - checks if any one of the specified keys is signed in the transaction

  • all_keys_signed - checks if all specified keys are signed in the transaction

Last updated