DCIPs/assets/eip-5269/test/TestERC5269.ts

89 lines
4.6 KiB
TypeScript

// SPDX-License-Identifier: CC0-1.0
// Author: Zainan Victor Zhou <ercref@zzn.im>
// DRAFTv1
// Source https://github.com/ercref/ercref-contracts/tree/main/ERCs/eip-5269
// Deployment https://goerli.etherscan.io/address/0x33F735852619E3f99E1AF069cCf3b9232b2806bE#code
import { loadFixture, mine } from "@nomicfoundation/hardhat-network-helpers";
import { expect } from "chai";
import { BigNumber, ContractReceipt, Wallet } from "ethers";
import { ethers } from "hardhat";
describe("ERC5269", function () {
async function deployFixture() {
// Contracts are deployed using the first signer/account by default
const [owner, mintSender, recipient] = await ethers.getSigners();
const testWallet: Wallet = new ethers.Wallet("0x0000000000000000000000000000000000000000000000000000000000000001");
const factory = await ethers.getContractFactory("ERC5269");
const contract = await factory.deploy();
let tx1 = await contract.deployed();
let txDeployErc5269: ContractReceipt = await tx1.deployTransaction.wait();
const ERC721ForTesting = await ethers.getContractFactory("ERC721ForTesting");
const erc721ForTesting = await ERC721ForTesting.deploy();
let tx2 = await erc721ForTesting.deployed();
const txDeployErc721: ContractReceipt = await tx2.deployTransaction.wait();
const provider = ethers.provider;
return {
provider,
contract,
erc721ForTesting,
tx1, txDeployErc5269,
tx2, txDeployErc721,
owner, mintSender, recipient, testWallet
};
}
describe("Deployment", function () {
it("Should be deployable", async function () {
await loadFixture(deployFixture);
});
it("Should emit proper OnSupportEIP events", async function () {
let { txDeployErc721 } = await loadFixture(deployFixture);
let events = txDeployErc721.events?.filter(event => event.event === 'OnSupportEIP');
expect(events).to.have.lengthOf(4);
let ev5269 = events!.filter(
(event) => event.args!.majorEIPIdentifier.eq(5269));
expect(ev5269).to.have.lengthOf(1);
expect(ev5269[0].args!.caller).to.equal(BigNumber.from(0));
expect(ev5269[0].args!.minorEIPIdentifier).to.equal(BigNumber.from(0));
expect(ev5269[0].args!.eipStatus).to.equal(ethers.utils.id("DRAFTv1"));
let ev721 = events!.filter(
(event) => event.args!.majorEIPIdentifier.eq(721));
expect(ev721).to.have.lengthOf(3);
expect(ev721[0].args!.caller).to.equal(BigNumber.from(0));
expect(ev721[0].args!.minorEIPIdentifier).to.equal(BigNumber.from(0));
expect(ev721[0].args!.eipStatus).to.equal(ethers.utils.id("FINAL"));
expect(ev721[1].args!.caller).to.equal(BigNumber.from(0));
expect(ev721[1].args!.minorEIPIdentifier).to.equal(ethers.utils.id("ERC721Metadata"));
expect(ev721[1].args!.eipStatus).to.equal(ethers.utils.id("FINAL"));
expect(ev721[2].args!.caller).to.equal(BigNumber.from(0));
expect(ev721[2].args!.minorEIPIdentifier).to.equal(ethers.utils.id("ERC721Enumerable"));
expect(ev721[2].args!.eipStatus).to.equal(ethers.utils.id("FINAL"));
});
it("Should return proper eipStatus value when called supportEIP() for declared supported EIP/features", async function () {
let { erc721ForTesting, owner } = await loadFixture(deployFixture);
expect(await erc721ForTesting.supportEIP(owner.address, 5269, ethers.utils.hexZeroPad("0x00", 32), [])).to.equal(ethers.utils.id("DRAFTv1"));
expect(await erc721ForTesting.supportEIP(owner.address, 721, ethers.utils.hexZeroPad("0x00", 32), [])).to.equal(ethers.utils.id("FINAL"));
expect(await erc721ForTesting.supportEIP(owner.address, 721, ethers.utils.id("ERC721Metadata"), [])).to.equal(ethers.utils.id("FINAL"));
expect(await erc721ForTesting.supportEIP(owner.address, 721, ethers.utils.id("ERC721Enumerable"), [])).to.equal(ethers.utils.id("FINAL"));
expect(await erc721ForTesting.supportEIP(owner.address, 721, ethers.utils.id("WRONG FEATURE"), [])).to.equal(BigNumber.from(0));
expect(await erc721ForTesting.supportEIP(owner.address, 9999, ethers.utils.hexZeroPad("0x00", 32), [])).to.equal(BigNumber.from(0));
});
it("Should return zero as eipStatus value when called supportEIP() for non declared EIP/features", async function () {
let { erc721ForTesting, owner } = await loadFixture(deployFixture);
expect(await erc721ForTesting.supportEIP(owner.address, 721, ethers.utils.id("WRONG FEATURE"), [])).to.equal(BigNumber.from(0));
expect(await erc721ForTesting.supportEIP(owner.address, 9999, ethers.utils.hexZeroPad("0x00", 32), [])).to.equal(BigNumber.from(0));
});
});
});