Skip to content

Commit

Permalink
CU-86dtu92vq - Include how to test smart contract events using boa te…
Browse files Browse the repository at this point in the history
…st constructor
  • Loading branch information
luc10921 committed Jun 19, 2024
1 parent 9c903f9 commit 12e442e
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions docs/source/testing-and-debugging.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
```

0 comments on commit 12e442e

Please sign in to comment.