forked from DecentralizedClimateFoundation/DCIPs
87 lines
3.7 KiB
TypeScript
87 lines
3.7 KiB
TypeScript
|
import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
||
|
import { expect } from "chai";
|
||
|
import { ethers } from "hardhat";
|
||
|
|
||
|
describe("ERC5501EnumerableTest", function () {
|
||
|
async function initialize() {
|
||
|
// 365 * 24 * 60 * 60
|
||
|
const fastForwardYear = 31536000;
|
||
|
// allows to set multiple tokens which will expire after fastForwardYear
|
||
|
const expired = (await time.latest()) + fastForwardYear - 1;
|
||
|
|
||
|
const expires = (await time.latest()) + fastForwardYear + fastForwardYear;
|
||
|
|
||
|
const [owner, delegatee] = await ethers.getSigners();
|
||
|
|
||
|
const contractFactory = await ethers.getContractFactory(
|
||
|
"ERC5501EnumerableTestCollection"
|
||
|
);
|
||
|
const contract = await contractFactory.deploy("Test Collection", "TEST");
|
||
|
|
||
|
await contract.mint(owner.address, 1);
|
||
|
await contract.mint(owner.address, 2);
|
||
|
await contract.mint(owner.address, 3);
|
||
|
await contract.mint(owner.address, 4);
|
||
|
await contract.mint(owner.address, 5);
|
||
|
await contract.mint(owner.address, 6);
|
||
|
await contract.mint(owner.address, 7);
|
||
|
|
||
|
return { contract, owner, delegatee, expires, expired, fastForwardYear };
|
||
|
}
|
||
|
|
||
|
it("Return correct user tokens by index", async function () {
|
||
|
const { contract, owner, delegatee, expires, expired, fastForwardYear } =
|
||
|
await loadFixture(initialize);
|
||
|
|
||
|
await contract.setUser(1, delegatee.address, expires, false);
|
||
|
await contract.setUser(2, delegatee.address, expired, false);
|
||
|
await contract.setUser(3, delegatee.address, expires, false);
|
||
|
await contract.setUser(4, delegatee.address, expired, false);
|
||
|
await contract.setUser(5, delegatee.address, expires, false);
|
||
|
await contract.setUser(6, delegatee.address, expired, false);
|
||
|
await contract.setUser(7, delegatee.address, expires, false);
|
||
|
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 0)).to.equal(1);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 1)).to.equal(2);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 2)).to.equal(3);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 3)).to.equal(4);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 4)).to.equal(5);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 5)).to.equal(6);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 6)).to.equal(7);
|
||
|
|
||
|
// fast forward one year, token 2, 4, 6 expired for user
|
||
|
// current balance: 1, 3, 5, 7
|
||
|
await time.increaseTo((await time.latest()) + fastForwardYear);
|
||
|
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 0)).to.equal(1);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 1)).to.equal(3);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 2)).to.equal(5);
|
||
|
expect(await contract.tokenOfUserByIndex(delegatee.address, 3)).to.equal(7);
|
||
|
await expect(
|
||
|
contract.tokenOfUserByIndex(delegatee.address, 4)
|
||
|
).to.be.revertedWith("ERC5501Enumerable: owner index out of bounds");
|
||
|
});
|
||
|
|
||
|
it("Revert user token id by index query for zero address", async function () {
|
||
|
const { contract } = await loadFixture(initialize);
|
||
|
|
||
|
await expect(
|
||
|
contract.tokenOfUserByIndex(ethers.constants.AddressZero, 0)
|
||
|
).to.be.revertedWith("ERC5501Enumerable: address zero is not a valid owner");
|
||
|
});
|
||
|
|
||
|
it("Revert user token id by index query for out of bounds index", async function () {
|
||
|
const { contract, delegatee } = await loadFixture(initialize);
|
||
|
|
||
|
await expect(
|
||
|
contract.tokenOfUserByIndex(delegatee.address, 0)
|
||
|
).to.be.revertedWith("ERC5501Enumerable: owner index out of bounds");
|
||
|
});
|
||
|
|
||
|
it("Supports interface", async function () {
|
||
|
const { contract } = await loadFixture(initialize);
|
||
|
|
||
|
expect(await contract.supportsInterface("0x1d350ef8")).to.equal(true);
|
||
|
});
|
||
|
});
|