BurnableToken.behaviour.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const { assertRevert } = require('../../helpers/assertRevert');
  2. const { inLogs } = require('../../helpers/expectEvent');
  3. const BigNumber = web3.BigNumber;
  4. const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
  5. require('chai')
  6. .use(require('chai-as-promised'))
  7. .use(require('chai-bignumber')(BigNumber))
  8. .should();
  9. function shouldBehaveLikeBurnableToken ([owner], initialBalance) {
  10. describe('as a basic burnable token', function () {
  11. const from = owner;
  12. describe('when the given amount is not greater than balance of the sender', function () {
  13. const amount = 100;
  14. beforeEach(async function () {
  15. ({ logs: this.logs } = await this.token.burn(amount, { from }));
  16. });
  17. it('burns the requested amount', async function () {
  18. const balance = await this.token.balanceOf(from);
  19. balance.should.be.bignumber.equal(initialBalance - amount);
  20. });
  21. it('emits a burn event', async function () {
  22. const event = await inLogs(this.logs, 'Burn');
  23. event.args.burner.should.eq(owner);
  24. event.args.value.should.be.bignumber.equal(amount);
  25. });
  26. it('emits a transfer event', async function () {
  27. const event = await inLogs(this.logs, 'Transfer');
  28. event.args.from.should.eq(owner);
  29. event.args.to.should.eq(ZERO_ADDRESS);
  30. event.args.value.should.be.bignumber.equal(amount);
  31. });
  32. });
  33. describe('when the given amount is greater than the balance of the sender', function () {
  34. const amount = initialBalance + 1;
  35. it('reverts', async function () {
  36. await assertRevert(this.token.burn(amount, { from }));
  37. });
  38. });
  39. });
  40. }
  41. module.exports = {
  42. shouldBehaveLikeBurnableToken,
  43. };