becrypto/test/badgev2.test.js
2024-02-26 17:05:34 +08:00

109 lines
3.5 KiB
JavaScript

const BEBadge = artifacts.require("BEBadgeV2");
const {
BN,
constants,
expectEvent,
expectRevert,
} = require("@openzeppelin/test-helpers");
contract("BEBadgeV2", (accounts) => {
let badge;
const owner = accounts[0];
const user = accounts[1];
const executor = accounts[2];
beforeEach(async () => {
badge = await BEBadge.new("CRYPTO ELITE'S HERO", "HERO", 3);
});
it("should batch mint two badges", async () => {
await badge.batchMint(user, 2, { from: owner });
const balanceOfUser = await badge.balanceOf(user);
assert.equal(balanceOfUser, 2, "Incorrect user balance");
});
it("should revert batch minting two badges with not mint role", async () => {
const mintRole = await badge.MINTER_ROLE();
const err = `AccessControl: account ${(user+'').toLowerCase()} is missing role ${mintRole}`
await expectRevert(
badge.batchMint(user, 2, { from: user }),
err
);
});
it("should revert batch minting badges with not enough supply", async () => {
const err = `Exceeds the total supply`
await expectRevert(
badge.batchMint(user, 4, { from: owner }),
err
);
});
it("should mint one badge", async () => {
await badge.safeMint(user, { from: owner });
const balanceOfUser = await badge.balanceOf(user);
assert.equal(balanceOfUser, 1, "Incorrect user balance");
});
it("should revert minting one badge with not mint role", async () => {
const mintRole = await badge.MINTER_ROLE();
const err = `AccessControl: account ${(user+'').toLowerCase()} is missing role ${mintRole}`
await expectRevert(
badge.safeMint(user, { from: user }),
err
);
});
it("should burn one badge", async () => {
await badge.safeMint(user, { from: owner });
const tokenId = await badge.tokenOfOwnerByIndex(user, 0);
await badge.burn(tokenId, { from: user });
const balanceOfUser = await badge.balanceOf(user);
assert.equal(balanceOfUser, 0, "Incorrect user balance");
});
it("should burn one badge with approval", async () => {
await badge.safeMint(user, { from: owner });
const tokenId = await badge.tokenOfOwnerByIndex(user, 0);
const balanceOfUserTmp = await badge.balanceOf(user);
assert.equal(balanceOfUserTmp, 1, "Incorrect user balance");
await badge.approve(executor, tokenId, { from: user });
await badge.burn(tokenId, { from: executor });
const balanceOfUser = await badge.balanceOf(user);
assert.equal(balanceOfUser, 0, "Incorrect user balance");
});
it("should revert burning one badge", async () => {
const err = `ERC721: invalid token ID.`
await expectRevert(
badge.burn(1, { from: user }),
err
);
});
it("should revert burning one badge without approval", async () => {
const err = `ERC721: caller is not token owner or approved.`
await badge.safeMint(user, { from: owner });
const tokenId = await badge.tokenOfOwnerByIndex(user, 0);
await expectRevert(
badge.burn(tokenId, { from: executor }),
err
);
});
it("should receive event for RoleGranted and RoleRevoked", async () => {
const role = await badge.MINTER_ROLE();
const receipt = await badge.grantRole(role, user, { from: owner });
expectEvent(receipt, "RoleGranted", {
account: user,
role: role,
sender: owner,
});
const receipt2 = await badge.revokeRole(role, user, { from: owner });
expectEvent(receipt2, "RoleRevoked", {
account: user,
role: role,
sender: owner,
});
});
});