UNPKG

@gooddollar/goodcontracts

Version:
88 lines (81 loc) 3.43 kB
const SimpleDAIStaking = artifacts.require("SimpleDAIStaking"); const GoodDollar = artifacts.require("GoodDollar"); const DAIMock = artifacts.require("DAIMock"); const cDAIMock = artifacts.require("cDAIMock"); const Identity = artifacts.require("Identity"); const Avatar = artifacts.require("Avatar"); const fse = require("fs-extra"); const BN = web3.utils.BN; export const BLOCK_INTERVAL = 2; // kovan network addresses export const NULL_ADDRESS = "0x0000000000000000000000000000000000000000"; export const DAI_ADDRESS = "0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa"; export const cDAI_ADDRESS = "0xe7bc397dbd069fc7d0109c0636d06888bb50668c"; contract("SimpleDAIStaking - kovan e2e test", ([founder, staker]) => { let dai; let cDAI; let simpleStaking, avatar, identity; before(async function() { let network = process.env.NETWORK; if (network !== "kovan") { this.skip(); } dai = await DAIMock.at(DAI_ADDRESS); cDAI = await cDAIMock.at(cDAI_ADDRESS); avatar = await Avatar.deployed(); (identity = await Identity), deployed(); simpleStaking = await SimpleDAIStaking.new( DAI_ADDRESS, cDAI_ADDRESS, founder, BLOCK_INTERVAL, avatar.address, identity.address ); }); it("should be able to stake dai, withdraw gains if exists, and withdraw the staked tokens", async () => { await dai.approve(simpleStaking.address, web3.utils.toWei("500", "gwei"), { from: staker }); let balanceBefore = (await simpleStaking.stakers(staker)).stakedDAI; let totalStakedBefore = await simpleStaking.totalStaked(); await simpleStaking .stakeDAI(web3.utils.toWei("500", "gwei"), { from: staker }) .catch(console.log); let balanceAfter = (await simpleStaking.stakers(staker)).stakedDAI; expect((balanceAfter - balanceBefore).toString()).to.be.equal( web3.utils.toWei("500", "gwei") ); let totalStakedAfter = await simpleStaking.totalStaked(); expect((totalStakedAfter - totalStakedBefore).toString()).to.be.equal( web3.utils.toWei("500", "gwei") ); const gains = await simpleStaking.currentUBIInterest(); const cdaiGains = gains["0"]; const fundBalanceBefore = await cDAI.balanceOf(founder); await simpleStaking.collectUBIInterest(founder); const fundBalanceAfter = await cDAI.balanceOf(founder); const fundDaiWorth = await simpleStaking.currentDAIWorth(); expect(cdaiGains.toString()).to.be.equal( (fundBalanceAfter - fundBalanceBefore).toString() ); let stakedcDaiBalanceBefore = await cDAI.balanceOf(simpleStaking.address); let stakerDaiBalanceBefore = await dai.balanceOf(staker); const transaction = await simpleStaking.withdrawStake({ from: staker }); let stakedcDaiBalanceAfter = await cDAI.balanceOf(simpleStaking.address); let stakerDaiBalanceAfter = await dai.balanceOf(staker); let balanceAfterWithdraw = (await simpleStaking.stakers(staker)).stakedDAI; expect(stakedcDaiBalanceAfter.lt(stakedcDaiBalanceBefore)).to.be.true; expect(stakerDaiBalanceAfter.gt(stakerDaiBalanceBefore)).to.be.true; expect(balanceAfter.toString()).to.be.equal( (stakerDaiBalanceAfter - stakerDaiBalanceBefore).toString() ); expect(balanceAfterWithdraw.toString()).to.be.equal("0"); expect(transaction.logs[0].event).to.be.equal("DAIStakeWithdraw"); console.log("finish"); }); });