You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.7 KiB
66 lines
2.7 KiB
const { ethers } = require('hardhat');
|
|
const { expect } = require('chai');
|
|
const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers');
|
|
|
|
const ids = [42n, 1137n];
|
|
const values = [3000n, 9902n];
|
|
|
|
async function fixture() {
|
|
const [holder, operator, other] = await ethers.getSigners();
|
|
|
|
const token = await ethers.deployContract('$ERC1155Burnable', ['https://token-cdn-domain/{id}.json']);
|
|
await token.$_mint(holder, ids[0], values[0], '0x');
|
|
await token.$_mint(holder, ids[1], values[1], '0x');
|
|
|
|
return { token, holder, operator, other };
|
|
}
|
|
|
|
describe('ERC1155Burnable', function () {
|
|
beforeEach(async function () {
|
|
Object.assign(this, await loadFixture(fixture));
|
|
});
|
|
|
|
describe('burn', function () {
|
|
it('holder can burn their tokens', async function () {
|
|
await this.token.connect(this.holder).burn(this.holder, ids[0], values[0] - 1n);
|
|
|
|
expect(await this.token.balanceOf(this.holder, ids[0])).to.equal(1n);
|
|
});
|
|
|
|
it("approved operators can burn the holder's tokens", async function () {
|
|
await this.token.connect(this.holder).setApprovalForAll(this.operator, true);
|
|
await this.token.connect(this.operator).burn(this.holder, ids[0], values[0] - 1n);
|
|
|
|
expect(await this.token.balanceOf(this.holder, ids[0])).to.equal(1n);
|
|
});
|
|
|
|
it("unapproved accounts cannot burn the holder's tokens", async function () {
|
|
await expect(this.token.connect(this.other).burn(this.holder, ids[0], values[0] - 1n))
|
|
.to.be.revertedWithCustomError(this.token, 'ERC1155MissingApprovalForAll')
|
|
.withArgs(this.other, this.holder);
|
|
});
|
|
});
|
|
|
|
describe('burnBatch', function () {
|
|
it('holder can burn their tokens', async function () {
|
|
await this.token.connect(this.holder).burnBatch(this.holder, ids, [values[0] - 1n, values[1] - 2n]);
|
|
|
|
expect(await this.token.balanceOf(this.holder, ids[0])).to.equal(1n);
|
|
expect(await this.token.balanceOf(this.holder, ids[1])).to.equal(2n);
|
|
});
|
|
|
|
it("approved operators can burn the holder's tokens", async function () {
|
|
await this.token.connect(this.holder).setApprovalForAll(this.operator, true);
|
|
await this.token.connect(this.operator).burnBatch(this.holder, ids, [values[0] - 1n, values[1] - 2n]);
|
|
|
|
expect(await this.token.balanceOf(this.holder, ids[0])).to.equal(1n);
|
|
expect(await this.token.balanceOf(this.holder, ids[1])).to.equal(2n);
|
|
});
|
|
|
|
it("unapproved accounts cannot burn the holder's tokens", async function () {
|
|
await expect(this.token.connect(this.other).burnBatch(this.holder, ids, [values[0] - 1n, values[1] - 2n]))
|
|
.to.be.revertedWithCustomError(this.token, 'ERC1155MissingApprovalForAll')
|
|
.withArgs(this.other, this.holder);
|
|
});
|
|
});
|
|
});
|
|
|