ERC1155Burnable.test.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. const { BN, expectRevert } = require('@openzeppelin/test-helpers');
  2. const { expect } = require('chai');
  3. const ERC1155BurnableMock = artifacts.require('ERC1155BurnableMock');
  4. contract('ERC1155Burnable', function (accounts) {
  5. const [ holder, operator, other ] = accounts;
  6. const uri = 'https://token.com';
  7. const tokenIds = [new BN('42'), new BN('1137')];
  8. const amounts = [new BN('3000'), new BN('9902')];
  9. beforeEach(async function () {
  10. this.token = await ERC1155BurnableMock.new(uri);
  11. await this.token.mint(holder, tokenIds[0], amounts[0], '0x');
  12. await this.token.mint(holder, tokenIds[1], amounts[1], '0x');
  13. });
  14. describe('burn', function () {
  15. it('holder can burn their tokens', async function () {
  16. await this.token.burn(holder, tokenIds[0], amounts[0].subn(1), { from: holder });
  17. expect(await this.token.balanceOf(holder, tokenIds[0])).to.be.bignumber.equal('1');
  18. });
  19. it('approved operators can burn the holder\'s tokens', async function () {
  20. await this.token.setApprovalForAll(operator, true, { from: holder });
  21. await this.token.burn(holder, tokenIds[0], amounts[0].subn(1), { from: operator });
  22. expect(await this.token.balanceOf(holder, tokenIds[0])).to.be.bignumber.equal('1');
  23. });
  24. it('unapproved accounts cannot burn the holder\'s tokens', async function () {
  25. await expectRevert(
  26. this.token.burn(holder, tokenIds[0], amounts[0].subn(1), { from: other }),
  27. 'ERC1155: caller is not owner nor approved'
  28. );
  29. });
  30. });
  31. describe('burnBatch', function () {
  32. it('holder can burn their tokens', async function () {
  33. await this.token.burnBatch(holder, tokenIds, [ amounts[0].subn(1), amounts[1].subn(2) ], { from: holder });
  34. expect(await this.token.balanceOf(holder, tokenIds[0])).to.be.bignumber.equal('1');
  35. expect(await this.token.balanceOf(holder, tokenIds[1])).to.be.bignumber.equal('2');
  36. });
  37. it('approved operators can burn the holder\'s tokens', async function () {
  38. await this.token.setApprovalForAll(operator, true, { from: holder });
  39. await this.token.burnBatch(holder, tokenIds, [ amounts[0].subn(1), amounts[1].subn(2) ], { from: operator });
  40. expect(await this.token.balanceOf(holder, tokenIds[0])).to.be.bignumber.equal('1');
  41. expect(await this.token.balanceOf(holder, tokenIds[1])).to.be.bignumber.equal('2');
  42. });
  43. it('unapproved accounts cannot burn the holder\'s tokens', async function () {
  44. await expectRevert(
  45. this.token.burnBatch(holder, tokenIds, [ amounts[0].subn(1), amounts[1].subn(2) ], { from: other }),
  46. 'ERC1155: caller is not owner nor approved'
  47. );
  48. });
  49. });
  50. });