import { expect } from 'chai' import hre from "hardhat"; import { getBytes, solidityPackedKeccak256, } from 'ethers' import { loadFixture, } from "@nomicfoundation/hardhat-toolbox/network-helpers"; import { expandDecimals, increaseTime, mineBlock, print } from './shared/utilities'; const ONE_DAY = 3600 * 24 const ONE_MONTH = ONE_DAY * 30 describe('TestCECDistributor', function() { async function deployOneContract() { // Contracts are deployed using the first signer/account by default const [owner, user0, user1, user2] = await hre.ethers.getSigners(); const Cec = await hre.ethers.getContractFactory("MintableBaseToken"); const cec = await Cec.deploy("test cec", "cec"); await cec.setMinter(owner.address, true) const CECDistributor = await hre.ethers.getContractFactory("CECDistributor"); const lockDuration = ONE_DAY; // one day const start = (Date.now() / 1000 + 3600) | 0 // one hour later const distributor = await CECDistributor.deploy("first", cec.target, start); await cec.mint(distributor.target, expandDecimals(15000, 18)) const chainId = hre.network.config.chainId expect(await distributor.name()).to.equal("first") await distributor.updateInfo([user1.address], [[expandDecimals(1000, 18), 10, 300000, lockDuration]]) return { distributor, owner, user0, user1, user2, chainId, cec, start }; } describe("Deployment", function () { it('should deploy CECDistributor', async function() { const { distributor, user0, user1, user2, cec } = await loadFixture(deployOneContract); expect(await distributor.name()).to.equal("first") }); it('should success claim', async function() { const { distributor, owner, user0, user1, user2, cec, start } = await loadFixture(deployOneContract); const wallet = owner const provider = wallet.provider; await increaseTime(provider, 3601) await mineBlock(provider) const claimAmount1 = await distributor.calcClaimAmount(user1.address) expect(claimAmount1).to.equal(expandDecimals(300, 18)) // @ts-ignore await distributor.connect(user1).claim(user1.address) expect(await cec.balanceOf(user1.address)).to.equal(expandDecimals(300, 18)) const claimAmount2 = await distributor.calcClaimAmount(user1.address) expect(claimAmount2).to.equal(0) await increaseTime(provider, ONE_DAY) await mineBlock(provider) const claimAmount3 = await distributor.calcClaimAmount(user1.address) expect(claimAmount3).to.equal(0) await increaseTime(provider, ONE_MONTH) await mineBlock(provider) const claimAmount4 = await distributor.calcClaimAmount(user1.address) expect(claimAmount4).to.equal(expandDecimals(70, 18)) await increaseTime(provider, ONE_MONTH) await mineBlock(provider) const claimAmount5 = await distributor.calcClaimAmount(user1.address) expect(claimAmount5).to.equal(expandDecimals(140, 18)) // @ts-ignore await distributor.connect(user1).changeAddress(user1.address, user2.address) const claimAmount6 = await distributor.calcClaimAmount(user2.address) expect(claimAmount6).to.equal(expandDecimals(140, 18)) await expect(distributor.calcClaimAmount(user1.address)).to.be.revertedWith("CECDistributor: not in whitelist"); }); it('should revert claim for not start', async function() { const { distributor, owner, user0, user1, user2, cec, start } = await loadFixture(deployOneContract); // @ts-ignore await expect(distributor.connect(user1).claim(user1.address)).to.be.revertedWith("CECDistributor: not in claim time"); }); it('should revert claim for not in whitelist', async function() { const { distributor, owner, user0, user1, user2, cec, start } = await loadFixture(deployOneContract); // @ts-ignore await expect(distributor.connect(user2).claim(user1.address)).to.be.revertedWith("CECDistributor: not in whitelist"); }); it('should revert claim for pause', async function() { const { distributor, owner, user0, user1, user2, cec, start } = await loadFixture(deployOneContract); await distributor.pause() // @ts-ignore await expect(distributor.connect(user2).claim(user1.address)).to.be.revertedWith("Pausable: paused"); }); it('should change gov success', async function() { const { distributor, owner, user0, user1, user2, cec, start } = await loadFixture(deployOneContract); await distributor.setGov(user2.address) expect(await distributor.gov()).to.equal(user2.address) // @ts-ignore await distributor.connect(user2).pause() expect(await distributor.paused()).to.equal(true) }); }) })