Skip to content

Commit 9d57fb0

Browse files
committed
Add liquidity rewards wrapper unit tests
1 parent b11d94f commit 9d57fb0

2 files changed

Lines changed: 101 additions & 1 deletion

File tree

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import { Contract, providers } from "ethers"
2+
import BigNumber from "bignumber.js"
3+
4+
import {
5+
LiquidityRewards,
6+
LiquidityRewardsFactory,
7+
LiquidityRewardsUniswap,
8+
} from "../liquidity-rewards"
9+
import { Token } from "../utils"
10+
import LPRewardsKEEPETH from "../abis/LPRewardsKEEPETH.json"
11+
import { UniswapExchangeService } from "../exchange-service"
12+
13+
jest.mock("ethers")
14+
15+
jest.mock("../abis/LPRewardsKEEPETH.json", () => ({
16+
abi: [],
17+
networks: {
18+
1: {
19+
address: "0x0",
20+
},
21+
},
22+
}))
23+
24+
describe("Test LiquidityRewards", () => {
25+
describe("Test base LiquidityRewards", () => {
26+
const liquidityRewards = new LiquidityRewards(
27+
{},
28+
{ getKeepTokenPriceInUSD: () => {} }
29+
)
30+
const mockedTotalSupply = Token.fromTokenUnit(100000)
31+
const mockedRewarPoolPerWeek = "30000"
32+
const mockedTotalSupplyInUSD = "50000"
33+
const mockedKeepTokenPriceInUSD = new BigNumber("0.55")
34+
liquidityRewards._totalSupply = jest
35+
.fn()
36+
.mockResolvedValue(mockedTotalSupply)
37+
liquidityRewards._rewardPoolPerWeek = jest
38+
.fn()
39+
.mockResolvedValue(mockedRewarPoolPerWeek)
40+
liquidityRewards._totalSupplyInUSD = jest
41+
.fn()
42+
.mockResolvedValue(mockedTotalSupplyInUSD)
43+
44+
const exchangeSpy = jest
45+
.spyOn(liquidityRewards.exchangeSercvice, "getKeepTokenPriceInUSD")
46+
.mockResolvedValue(mockedKeepTokenPriceInUSD)
47+
const calculateRSpy = jest.spyOn(liquidityRewards, "_calculateR")
48+
const calculateAPYSpy = jest.spyOn(liquidityRewards, "_calculateAPY")
49+
50+
test("should correctly calculate APY", async () => {
51+
const result = await liquidityRewards.calculateAPY()
52+
53+
expect(liquidityRewards._totalSupply).toHaveBeenCalled()
54+
expect(liquidityRewards._rewardPoolPerWeek).toHaveBeenCalled()
55+
expect(liquidityRewards._totalSupplyInUSD).toHaveBeenCalledWith(
56+
mockedTotalSupply.toString()
57+
)
58+
expect(exchangeSpy).toHaveBeenCalled()
59+
expect(calculateRSpy).toHaveBeenCalledWith(
60+
mockedKeepTokenPriceInUSD,
61+
mockedRewarPoolPerWeek,
62+
mockedTotalSupplyInUSD
63+
)
64+
65+
const expectedR = new BigNumber(mockedKeepTokenPriceInUSD)
66+
.multipliedBy(mockedRewarPoolPerWeek)
67+
.div(mockedTotalSupplyInUSD)
68+
69+
expect(calculateAPYSpy).toHaveBeenCalledWith(expectedR, 52)
70+
71+
const expectedAPY = expectedR
72+
.plus(1)
73+
.pow(52)
74+
.minus(1)
75+
.multipliedBy(100)
76+
.decimalPlaces(2, BigNumber.ROUND_DOWN)
77+
.toString()
78+
79+
expect(result).toEqual(expectedAPY)
80+
})
81+
})
82+
83+
describe("Test LiquidityRewards factory", () => {
84+
test("should create the liquidity rewards pool wrapper correctly", () => {
85+
const liquidityRewards = LiquidityRewardsFactory.create("KEEP_ETH")
86+
const mockContractCalls = Contract.mock.calls
87+
expect(Contract).toHaveBeenCalled()
88+
expect(mockContractCalls[0][0]).toEqual(
89+
LPRewardsKEEPETH.networks[1].address
90+
)
91+
expect(mockContractCalls[0][1]).toEqual(LPRewardsKEEPETH.abi)
92+
93+
expect(liquidityRewards).toBeInstanceOf(LiquidityRewardsUniswap)
94+
expect(liquidityRewards.exchangeSercvice).toBeInstanceOf(
95+
UniswapExchangeService
96+
)
97+
expect(liquidityRewards.contract).toBeInstanceOf(Contract)
98+
})
99+
})
100+
})

src/lib/liquidity-rewards/liquidity-rewards.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const NETWORK = 1
1717
const INFURA_RPC_URL =
1818
"https://mainnet.infura.io/v3/c80e8ccdcc4c4a809bce4fc165310617"
1919

20-
class LiquidityRewards {
20+
export class LiquidityRewards {
2121
/**
2222
* @param {Contract} _contract Ethers contract instance.
2323
* @param {BaseExchangeService} _exchangeService The exchange service.

0 commit comments

Comments
 (0)