mirror of openzeppelin-contracts
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.
 
 
 
 
 
openzeppelin-contracts/test/token/ERC1155/extensions/ERC1155Supply.test.js

119 lines
4.1 KiB

const { ethers } = require('hardhat');
const { expect } = require('chai');
const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers');
async function fixture() {
const [holder] = await ethers.getSigners();
const token = await ethers.deployContract('$ERC1155Supply', ['https://token-cdn-domain/{id}.json']);
return { token, holder };
}
describe('ERC1155Supply', function () {
const firstTokenId = 37n;
const firstTokenValue = 42n;
const secondTokenId = 19842n;
const secondTokenValue = 23n;
beforeEach(async function () {
Object.assign(this, await loadFixture(fixture));
});
describe('before mint', function () {
it('exist', async function () {
expect(await this.token.exists(firstTokenId)).to.be.false;
});
it('totalSupply', async function () {
expect(await this.token.totalSupply(ethers.Typed.uint256(firstTokenId))).to.equal(0n);
expect(await this.token.totalSupply()).to.equal(0n);
});
});
describe('after mint', function () {
describe('single', function () {
beforeEach(async function () {
await this.token.$_mint(this.holder, firstTokenId, firstTokenValue, '0x');
});
it('exist', async function () {
expect(await this.token.exists(firstTokenId)).to.be.true;
});
it('totalSupply', async function () {
expect(await this.token.totalSupply(ethers.Typed.uint256(firstTokenId))).to.equal(firstTokenValue);
expect(await this.token.totalSupply()).to.equal(firstTokenValue);
});
});
describe('batch', function () {
beforeEach(async function () {
await this.token.$_mintBatch(
this.holder,
[firstTokenId, secondTokenId],
[firstTokenValue, secondTokenValue],
'0x',
);
});
it('exist', async function () {
expect(await this.token.exists(firstTokenId)).to.be.true;
expect(await this.token.exists(secondTokenId)).to.be.true;
});
it('totalSupply', async function () {
expect(await this.token.totalSupply(ethers.Typed.uint256(firstTokenId))).to.equal(firstTokenValue);
expect(await this.token.totalSupply(ethers.Typed.uint256(secondTokenId))).to.equal(secondTokenValue);
expect(await this.token.totalSupply()).to.equal(firstTokenValue + secondTokenValue);
});
});
});
describe('after burn', function () {
describe('single', function () {
beforeEach(async function () {
await this.token.$_mint(this.holder, firstTokenId, firstTokenValue, '0x');
await this.token.$_burn(this.holder, firstTokenId, firstTokenValue);
});
it('exist', async function () {
expect(await this.token.exists(firstTokenId)).to.be.false;
});
it('totalSupply', async function () {
expect(await this.token.totalSupply(ethers.Typed.uint256(firstTokenId))).to.equal(0n);
expect(await this.token.totalSupply()).to.equal(0n);
});
});
describe('batch', function () {
beforeEach(async function () {
await this.token.$_mintBatch(
this.holder,
[firstTokenId, secondTokenId],
[firstTokenValue, secondTokenValue],
'0x',
);
await this.token.$_burnBatch(this.holder, [firstTokenId, secondTokenId], [firstTokenValue, secondTokenValue]);
});
it('exist', async function () {
expect(await this.token.exists(firstTokenId)).to.be.false;
expect(await this.token.exists(secondTokenId)).to.be.false;
});
it('totalSupply', async function () {
expect(await this.token.totalSupply(ethers.Typed.uint256(firstTokenId))).to.equal(0n);
expect(await this.token.totalSupply(ethers.Typed.uint256(secondTokenId))).to.equal(0n);
expect(await this.token.totalSupply()).to.equal(0n);
});
});
});
describe('other', function () {
it('supply unaffected by no-op', async function () {
await this.token.$_update(ethers.ZeroAddress, ethers.ZeroAddress, [firstTokenId], [firstTokenValue]);
expect(await this.token.totalSupply(ethers.Typed.uint256(firstTokenId))).to.equal(0n);
expect(await this.token.totalSupply()).to.equal(0n);
});
});
});