diff --git a/docs/source/testing-and-debugging.md b/docs/source/testing-and-debugging.md index 4cb68c55..f8b8f6b8 100644 --- a/docs/source/testing-and-debugging.md +++ b/docs/source/testing-and-debugging.md @@ -135,3 +135,35 @@ of the transaction. result, _ = await self.call("get_message", return_type=str) self.assertEqual(new_message, result) ``` + +#### Accessing Events + +If you want to test events, you'll get all the notifications that were emitted on the transaction from the second return +value of the `call` method. The resulting stack of every notification is a list of stack items, so it's best you unwrap +them using [neo-mamba unwrapping methods](https://dojo.coz.io/neo3/mamba/api/neo3/api/helpers/unwrap.html). In this +example, we are testing the "Transfer" event, so we can use the `Nep17TransferEvent` class from `boaconstructor`. If you +plan to test other events, it's best you also create a class or method that will help you unwrap the stack results. +Check out [`Nep17TransferEvent`](https://github.com/CityOfZion/boa-test-constructor/blob/20a45755767b3d919bf7a594cfff6bff78cb72ac/boaconstructor/__init__.py#L302-L314) +implementation for reference. + +```python + # inside the HelloWorldWithDeployTest class + async def test_gas_transfer_event(self): + # the amount of GAS tokens to transfer, since we will be invoking the transfer method, it's necessary to multiply by the decimals + amount = 1 * 10**8 + # calling the transfer method to emit a 'Transfer' event + result, notifications = await self.call( + "transfer", [self.user1.script_hash, self.genesis.script_hash, amount, None], + return_type=bool, target_contract=GAS, signing_accounts=[self.user1] + ) + self.assertEqual(True, result) + self.assertEqual(1, len(notifications)) + self.assertEqual("Transfer", notifications[0].event_name) + + from boaconstructor import Nep17TransferEvent + # we can use the Nep17TransferEvent class to unwrap the stack items + transfer_event = Nep17TransferEvent.from_notification(notifications[0]) + self.assertEqual(self.user1.script_hash, transfer_event.source) + self.assertEqual(self.genesis.script_hash, transfer_event.destination) + self.assertEqual(amount, transfer_event.amount) +```