89 lines
2.9 KiB
JavaScript
89 lines
2.9 KiB
JavaScript
const EvolveProxy = artifacts.require("EvolveProxy");
|
|
const NFT = artifacts.require("NFT");
|
|
const {
|
|
BN,
|
|
constants,
|
|
expectEvent,
|
|
expectRevert,
|
|
} = require("@openzeppelin/test-helpers");
|
|
const Web3 = require("web3");
|
|
|
|
contract("EvolveProxy", (accounts) => {
|
|
let evolveProxy;
|
|
let nft;
|
|
const owner = accounts[0];
|
|
const user = accounts[1];
|
|
const executor = accounts[2];
|
|
let web3 = new Web3(Web3.givenProvider);
|
|
|
|
beforeEach(async () => {
|
|
nft = await NFT.new("CRYPTO ELITE'S HERO", "HERO", 0);
|
|
evolveProxy = await EvolveProxy.new(nft.address);
|
|
await nft.setMintRole(evolveProxy.address);
|
|
});
|
|
|
|
it("should evolve the NFT when tokenIds[0] does not exist", async () => {
|
|
const evolveEventId = "1";
|
|
const tokenIds = [new BN(1)];
|
|
const startTime = Date.now() / 1000 | 0;
|
|
const saltNonce = (Math.random() * 1000) | 0;
|
|
let signStr = web3.utils.soliditySha3.apply(this,
|
|
[evolveEventId, user, startTime, saltNonce, ...tokenIds]);
|
|
let signature = await web3.eth.sign(signStr, executor);
|
|
signature = signature.replace(/00$/, "1b").replace(/01$/, "1c");
|
|
|
|
await evolveProxy.updateExecutor(executor, { from: owner });
|
|
|
|
const receipt = await evolveProxy.evolveNft(
|
|
evolveEventId,
|
|
tokenIds,
|
|
startTime,
|
|
saltNonce,
|
|
signature,
|
|
{ from: user }
|
|
);
|
|
// const tokenBNIds = tokenIds.map((id) => web3.utils.toBN(id));
|
|
// expectEvent(receipt, "TokenEvolved", {
|
|
// evolveEventId,
|
|
// owner: user,
|
|
// tokenIds,
|
|
// });
|
|
|
|
const ownerOfToken1 = await nft.ownerOf("1");
|
|
assert.equal(ownerOfToken1, user, "Token 1 ownership not transferred");
|
|
|
|
const balanceOfUser = await nft.balanceOf(user);
|
|
assert.equal(balanceOfUser, 1, "Incorrect user balance");
|
|
});
|
|
|
|
it("should evolve the NFT and burn other tokens when tokenIds length is greater than 1", async () => {
|
|
const evolveEventId = "2";
|
|
const tokenIds = ["1", "2", "3"];
|
|
const startTime = Date.now() / 1000 | 0;
|
|
const saltNonce = (Math.random() * 1000) | 0;
|
|
let signStr = web3.utils.soliditySha3.apply(this,
|
|
[evolveEventId, user, startTime, saltNonce, ...tokenIds]);
|
|
let signature = await web3.eth.sign(signStr, executor);
|
|
signature = signature.replace(/00$/, "1b").replace(/01$/, "1c");
|
|
|
|
await evolveProxy.updateExecutor(executor, { from: owner });
|
|
await nft.batchMint(user, tokenIds, { from: owner });
|
|
await nft.approve(evolveProxy.address, "2", { from: user });
|
|
await nft.approve(evolveProxy.address, "3", { from: user });
|
|
|
|
await evolveProxy.evolveNft(
|
|
evolveEventId,
|
|
tokenIds,
|
|
startTime,
|
|
saltNonce,
|
|
signature,
|
|
{ from: user }
|
|
);
|
|
|
|
const ownerOfToken1 = await nft.ownerOf(1);
|
|
assert.equal(ownerOfToken1, user, "Token 1 ownership not transferred");
|
|
|
|
const balanceOfUser = await nft.balanceOf(user);
|
|
assert.equal(balanceOfUser, 1, "Incorrect user balance");
|
|
});
|
|
}); |