From 8a9ce14a9d1a85f2e82f6ec2b05b0725dfd88f50 Mon Sep 17 00:00:00 2001 From: Lecky Lao Date: Fri, 21 Aug 2020 01:53:33 +1000 Subject: [PATCH] added test for CurveGauge; added ABI for CurveGauge; added MockCurveGauge and MockCurveGaugeMapping; --- contracts/tests/MockCurveGauge.sol | 27 ++++ contracts/tests/MockCurveGaugeMapping.sol | 7 + test/CurveGauge.js | 149 ++++++++++++++++++++++ test/abi/curveGauge.json | 1 + 4 files changed, 184 insertions(+) create mode 100644 contracts/tests/MockCurveGauge.sol create mode 100644 contracts/tests/MockCurveGaugeMapping.sol create mode 100644 test/CurveGauge.js create mode 100644 test/abi/curveGauge.json diff --git a/contracts/tests/MockCurveGauge.sol b/contracts/tests/MockCurveGauge.sol new file mode 100644 index 0000000..c42896a --- /dev/null +++ b/contracts/tests/MockCurveGauge.sol @@ -0,0 +1,27 @@ +pragma solidity ^0.6.0; +pragma experimental ABIEncoderV2; + +import { ConnectCurveGauge } from "../connectors/curve_gauge.sol"; + +contract MockCurveGauge is ConnectCurveGauge{ + address public curveMintorAddr; + address public curveGaugeMappingAddr; + + constructor(address _curveMintorAddr, address _curveGaugeMappingAddr) public { + curveMintorAddr = _curveMintorAddr; + curveGaugeMappingAddr = _curveGaugeMappingAddr; + } + + function emitEvent(bytes32 eventCode, bytes memory eventData) override internal {} + + function getCurveGaugeMappingAddr() override internal view returns (address) { + return curveGaugeMappingAddr; + } + + function getCurveMintorAddr() override internal view returns (address) { + return curveMintorAddr; + } + + function setUint(uint setId, uint val) override internal {} +} + diff --git a/contracts/tests/MockCurveGaugeMapping.sol b/contracts/tests/MockCurveGaugeMapping.sol new file mode 100644 index 0000000..0996e6b --- /dev/null +++ b/contracts/tests/MockCurveGaugeMapping.sol @@ -0,0 +1,7 @@ +pragma solidity ^0.6.0; + +import { CurveGaugeMapping } from "../mapping/curve_gauge_mapping.sol"; + +contract MockCurveGaugeMapping is CurveGaugeMapping { + modifier isChief override {_;} +} diff --git a/test/CurveGauge.js b/test/CurveGauge.js new file mode 100644 index 0000000..1677caf --- /dev/null +++ b/test/CurveGauge.js @@ -0,0 +1,149 @@ +const { + BN, // Big Number support + expectEvent, // Assertions for emitted events + expectRevert, // Assertions for transactions that should fail + balance, + ether +} = require('@openzeppelin/test-helpers'); + +const MockContract = artifacts.require("MockContract"); +const MockCurveGauge = artifacts.require('MockCurveGauge'); +const MockCurveGaugeMapping = artifacts.require('MockCurveGaugeMapping'); +const erc20ABI = require("./abi/erc20.js"); +const gaugeABI = require("./abi/curveGauge.json"); + +contract("ConnectCurveGauge", async accounts => { + const [sender, receiver] = accounts; + let mock, mockCurveGauge, mockCurveGaugeMapping; + + before(async function () { + mock = await MockContract.new(); + mockCurveGaugeMapping = await MockCurveGaugeMapping.new(); + mockCurveGauge = await MockCurveGauge.new(mock.address, mockCurveGaugeMapping.address); + // lp_token = new web3.eth.Contract(erc20ABI, mock.address); + curveGauge = new web3.eth.Contract(gaugeABI, mock.address) + // mocking lp_token + let lp_token = await curveGauge.methods.lp_token().encodeABI(); + await mock.givenMethodReturnAddress(lp_token, mock.address); + // mocking crv_token + let crv_token = await curveGauge.methods.crv_token().encodeABI(); + await mock.givenMethodReturnAddress(crv_token, mock.address); + // mocking rewarded_token + let rewarded_token = await curveGauge.methods.rewarded_token().encodeABI(); + await mock.givenMethodReturnAddress(rewarded_token, mock.address); + + mockCurveGaugeMapping.addGaugeMapping('compound', mock.address, false); + mockCurveGaugeMapping.addGaugeMapping('susd', mock.address, true); + }) + + it('can deposit into compound gauge', async function() { + const tx = await mockCurveGauge.deposit( + "compound", + 10000000, + 0, + 0 + ) + expectEvent(tx, "LogDeposit", { + amount: "10000000", + getId: "0", + setId: "0" + }); + }); + + it('can claim reward from compound gauge', async function() { + const tx = await mockCurveGauge.claimReward( + "compound", + 0, + 0 + ) + expectEvent(tx, "LogClaimedReward"); + }); + + it('can withdraw from compound gauge', async function() { + const tx = await mockCurveGauge.withdraw( + "compound", + 10000000, + 0, + 0, + 0, + 0 + ) + expectEvent(tx, "LogClaimedReward"); + expectEvent(tx, "LogWithdraw", { + amount: "10000000", + getId: "0", + setId: "0" + }); + }); + + it('can deposit into susd gauge', async function() { + const tx = await mockCurveGauge.deposit( + "susd", + 10000000, + 0, + 0 + ) + expectEvent(tx, "LogDeposit", { + amount: "10000000", + getId: "0", + setId: "0" + }); + }); + + it('can claim reward from susd gauge', async function() { + const tx = await mockCurveGauge.claimReward( + "susd", + 0, + 0 + ) + expectEvent(tx, "LogClaimedReward"); + }); + + it('can withdraw from susd gauge', async function() { + const tx = await mockCurveGauge.withdraw( + "susd", + 10000000, + 0, + 0, + 0, + 0 + ) + expectEvent(tx, "LogClaimedReward"); + expectEvent(tx, "LogWithdraw", { + amount: "10000000", + getId: "0", + setId: "0" + }); + }); + + it('cannot deposit into unknown gauge', async function() { + const tx = mockCurveGauge.deposit( + "unknown", + 10000000, + 0, + 0 + ) + await expectRevert(tx, "wrong-gauge-pool-name") + }); + + it('cannot claim reward from unknown gauge', async function() { + const tx = mockCurveGauge.claimReward( + "unknown", + 0, + 0 + ) + await expectRevert(tx, "wrong-gauge-pool-name") + }); + + it('cannot withdraw from unknown gauge', async function() { + const tx = mockCurveGauge.withdraw( + "unknown", + 10000000, + 0, + 0, + 0, + 0 + ) + await expectRevert(tx, "wrong-gauge-pool-name") + }); +}) diff --git a/test/abi/curveGauge.json b/test/abi/curveGauge.json new file mode 100644 index 0000000..7123d81 --- /dev/null +++ b/test/abi/curveGauge.json @@ -0,0 +1 @@ +[{"name":"Deposit","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateLiquidityLimit","inputs":[{"type":"address","name":"user","indexed":false},{"type":"uint256","name":"original_balance","indexed":false},{"type":"uint256","name":"original_supply","indexed":false},{"type":"uint256","name":"working_balance","indexed":false},{"type":"uint256","name":"working_supply","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"lp_addr"},{"type":"address","name":"_minter"},{"type":"address","name":"_reward_contract"},{"type":"address","name":"_rewarded_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"user_checkpoint","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":2311984},{"name":"claimable_tokens","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":2231138},{"name":"claimable_reward","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function","gas":7300},{"name":"kick","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":2317383},{"name":"set_approve_deposit","outputs":[],"inputs":[{"type":"address","name":"addr"},{"type":"bool","name":"can_deposit"}],"stateMutability":"nonpayable","type":"function","gas":35826},{"name":"deposit","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function"},{"name":"deposit","outputs":[],"inputs":[{"type":"uint256","name":"_value"},{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function"},{"name":"withdraw","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function"},{"name":"withdraw","outputs":[],"inputs":[{"type":"uint256","name":"_value"},{"type":"bool","name":"claim_rewards"}],"stateMutability":"nonpayable","type":"function"},{"name":"claim_rewards","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function"},{"name":"claim_rewards","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function"},{"name":"integrate_checkpoint","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2387},{"name":"minter","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1511},{"name":"crv_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1541},{"name":"lp_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1571},{"name":"controller","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1601},{"name":"voting_escrow","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1631},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1815},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1691},{"name":"future_epoch_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1721},{"name":"approved_to_deposit","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"arg0"},{"type":"address","name":"arg1"}],"stateMutability":"view","type":"function","gas":2059},{"name":"working_balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1935},{"name":"working_supply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1811},{"name":"period","outputs":[{"type":"int128","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1841},{"name":"period_timestamp","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1980},{"name":"integrate_inv_supply","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2010},{"name":"integrate_inv_supply_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2085},{"name":"integrate_checkpoint_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2115},{"name":"integrate_fraction","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2145},{"name":"inflation_rate","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2021},{"name":"reward_contract","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2051},{"name":"rewarded_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2081},{"name":"reward_integral","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2111},{"name":"reward_integral_for","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2295},{"name":"rewards_for","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2325},{"name":"claimed_rewards_for","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2355}]