DCIPs/assets/eip-5006/test/test.ts

117 lines
3.9 KiB
TypeScript

import { expect } from "chai";
import { ethers } from "hardhat";
import hre from "hardhat";
describe("Test 1155 User Role", function () {
let alice, bob, carl;
let contract;
let expiry;
async function checkRecord(rid,tokenId,amount,owner,user,expiry_) {
let record = await contract.userRecordOf(rid);
expect(record[0]).equals(tokenId,"tokenId");
expect(record[1]).equals(owner,"owner");
expect(record[2]).equals(amount,"amount");
expect(record[3]).equals(user,"user");
expect(record[4]).equals(expiry_,"expiry_");
}
beforeEach(async function () {
[alice, bob, carl] = await ethers.getSigners();
const ERC5006Demo = await ethers.getContractFactory("ERC5006Demo");
contract = await ERC5006Demo.deploy("", 3);
expiry = Math.floor(new Date().getTime() / 1000) + 3600;
});
describe("", function () {
it("InterfaceId should equals 0xc26d96cc", async function () {
expect(await contract.getInterfaceId()).equals("0xc26d96cc");
});
it("Should set user to bob success", async function () {
await contract.mint(alice.address, 1, 100);
await contract.createUserRecord(alice.address, bob.address, 1, 10, expiry);
await checkRecord(1,1,10,alice.address,bob.address,expiry);
expect(await contract.usableBalanceOf(bob.address, 1)).equals(10);
expect(await contract.balanceOf(alice.address, 1)).equals(90);
expect(await contract.frozenBalanceOf(alice.address, 1)).equals(10);
});
it("Should set user to bob fail", async function () {
await contract.mint(alice.address, 1, 100);
await contract.createUserRecord(alice.address, bob.address, 1, 10, expiry);
await contract.createUserRecord(alice.address, bob.address, 1, 10, expiry);
await contract.createUserRecord(alice.address, bob.address, 1, 10, expiry);
await expect(contract.createUserRecord(alice.address, bob.address, 1, 10, expiry)).to.be.revertedWith("user cannot have more records");
});
it("Should set user to bob fail : balance is not enough", async function () {
await contract.mint(alice.address, 1, 100);
await expect(contract.createUserRecord(alice.address, bob.address, 1, 101, expiry)).to.be.revertedWith('ERC1155: insufficient balance for transfer');
});
it("Should set user to bob fail : only owner or approved", async function () {
await contract.mint(alice.address, 1, 100);
await contract.mint(carl.address, 1, 100);
await expect(contract.createUserRecord(carl.address, bob.address, 1, 110, expiry)).to.be.revertedWith('only owner or approved');
});
it("Should deleteUserRecord success", async function () {
await contract.mint(alice.address, 1, 100);
await contract.createUserRecord(alice.address, bob.address, 1, 10, expiry);
// await hre.network.provider.send("hardhat_mine", ["0x5a0", "0x3c"]);
await contract.deleteUserRecord(1);
await checkRecord(1,0,0,"0x0000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000",0);
expect(await contract.usableBalanceOf(bob.address, 1)).equals(0);
expect(await contract.balanceOf(alice.address, 1)).equals(100);
expect(await contract.frozenBalanceOf(alice.address, 1)).equals(0);
});
it("bob should deleteUserRecord fail", async function () {
await contract.mint(alice.address, 1, 100);
await contract.createUserRecord(alice.address, bob.address, 1, 10, expiry);
await expect(contract.connect(bob).deleteUserRecord(1)).to.be.revertedWith("only owner or approved");
});
});
});