-
Notifications
You must be signed in to change notification settings - Fork 1
/
zeNFT.test.js
170 lines (131 loc) · 6.19 KB
/
zeNFT.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
const { artifacts, ethers, web3 } = require("hardhat");
const { expect } = require("chai");
const chai = require("chai");
const { solidity } = require("ethereum-waffle");
chai
.use(solidity)
.should();
const name = "ZEN";
const symbol = "ZEN";
const baseURI = "zenft.farm/";
const mintCap = 5;
const mintFee = ethers.utils.parseEther("0.5");
describe("zeNFT", function () {
it("NFT has correct name and symbol", async function () {
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, 0);
await nft.deployed();
expect(await nft.name()).to.equal("ZEN");
expect(await nft.symbol()).to.equal("ZEN");
});
it("NFTs have correct metadata after mint", async function () {
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, 0);
await nft.deployed();
await nft.mint();
expect(await nft.tokenURI(1)).to.equal("zenft.farm/1");
await nft.mint();
expect(await nft.tokenURI(2)).to.equal("zenft.farm/2");
await nft.mint();
expect(await nft.tokenURI(3)).to.equal("zenft.farm/3");
});
it("NFT minters have correct balances and total supply matches", async function () {
[minter0, minter1] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, 0);
await nft.deployed();
await nft.mint();
expect(await nft.balanceOf(minter0.address)).to.equal("1");
await nft.mint();
expect(await nft.balanceOf(minter0.address)).to.equal("2");
await nft.connect(minter1).mint();
expect(await nft.balanceOf(minter1.address)).to.equal("1");
expect(await nft.totalSupply()).to.equal("3");
});
it("NFT burners have correct balances and total supply matches", async function () {
[burner0, burner1] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, 0);
await nft.deployed();
await nft.mint();
expect(await nft.balanceOf(burner0.address)).to.equal("1");
await nft.burn(1);
expect(await nft.balanceOf(burner0.address)).to.equal("0");
await nft.mint();
expect(await nft.balanceOf(burner0.address)).to.equal("1");
await nft.connect(burner1).mint();
expect(await nft.balanceOf(burner1.address)).to.equal("1");
await nft.connect(burner1).burn(3);
expect(await nft.balanceOf(burner1.address)).to.equal("0");
expect(await nft.totalSupply()).to.equal("1");
});
it("NFT holders can transfer tokens, have correct balances, and total supply doesn't change", async function () {
[holder0, holder1, holder2] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, 0);
await nft.deployed();
await nft.mint();
await nft.transferFrom(holder0.address, holder1.address, 1);
expect(await nft.balanceOf(holder0.address)).to.equal("0");
expect(await nft.balanceOf(holder1.address)).to.equal("1");
await nft.connect(holder2).mint();
expect(await nft.balanceOf(holder2.address)).to.equal("1");
await nft.connect(holder2).transferFrom(holder2.address, holder1.address, 2);
expect(await nft.balanceOf(holder2.address)).to.equal("0");
expect(await nft.balanceOf(holder1.address)).to.equal("2");
expect(await nft.totalSupply()).to.equal("2");
});
it("NFT minting with correct fee works", async function () {
[holder0] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, mintFee);
await nft.deployed();
await nft.mint({ value: ethers.utils.parseEther("0.5") });
});
it("NFT minting without correct fee doesn't work", async function () {
[holder0] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, mintFee);
await nft.deployed();
await nft.mint().should.be.revertedWith("ETH_FEE_NOT_ATTACHED");
});
it("NFT minting works up to cap", async function () {
[holder0] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, mintFee);
await nft.deployed();
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
});
it("NFT minting does not work past cap", async function () {
[holder0] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, mintFee);
await nft.deployed();
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") });
await nft.mint({ value: ethers.utils.parseEther("0.5") }).should.be.revertedWith("CAPPED");
});
it("NFT fees in ETH are collectable by owner", async function () {
[holder0, holder1] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, mintFee);
await nft.deployed();
await nft.connect(holder1).mint({ value: mintFee });
await nft.collectETH();
});
it("NFT fees in ETH are not collectable by non-owner", async function () {
[holder0, holder1, holder2] = await ethers.getSigners();
const NFT = await ethers.getContractFactory("zeNFT");
const nft = await NFT.deploy(name, symbol, baseURI, mintCap, mintFee);
await nft.deployed();
await nft.connect(holder1).mint({ value: mintFee });
await nft.connect(holder2).collectETH().should.be.revertedWith("Ownable: caller is not the owner");
});
});