-
Notifications
You must be signed in to change notification settings - Fork 1
/
test_operation.py
114 lines (90 loc) · 3.82 KB
/
test_operation.py
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
import brownie
from brownie import Contract
import pytest
from utils import actions, checks
def test_operation(
chain, accounts, token, vault, strategy, user, strategist, amount, RELATIVE_APPROX
):
# Deposit to the vault
user_balance_before = token.balanceOf(user)
actions.user_deposit(user, vault, token, amount)
# harvest
chain.sleep(1)
strategy.harvest({"from": strategist})
assert pytest.approx(strategy.estimatedTotalAssets(), rel=RELATIVE_APPROX) == amount
# tend()
strategy.tend({"from": strategist})
# withdrawal
vault.withdraw({"from": user})
assert (
pytest.approx(token.balanceOf(user), rel=RELATIVE_APPROX) == user_balance_before
)
def test_emergency_exit(
chain, accounts, token, vault, strategy, user, strategist, amount, RELATIVE_APPROX
):
# Deposit to the vault
actions.user_deposit(user, vault, token, amount)
chain.sleep(1)
strategy.harvest({"from": strategist})
assert pytest.approx(strategy.estimatedTotalAssets(), rel=RELATIVE_APPROX) == amount
# set emergency and exit
strategy.setEmergencyExit()
chain.sleep(1)
strategy.harvest({"from": strategist})
assert strategy.estimatedTotalAssets() < amount
def test_increase_debt_ratio(
chain, gov, token, vault, strategy, user, strategist, amount, RELATIVE_APPROX
):
# Deposit to the vault and harvest
actions.user_deposit(user, vault, token, amount)
vault.updateStrategyDebtRatio(strategy.address, 5_000, {"from": gov})
chain.sleep(1)
strategy.harvest({"from": strategist})
half = int(amount / 2)
assert pytest.approx(strategy.estimatedTotalAssets(), rel=RELATIVE_APPROX) == half
vault.updateStrategyDebtRatio(strategy.address, 10_000, {"from": gov})
chain.sleep(1)
strategy.harvest({"from": strategist})
assert pytest.approx(strategy.estimatedTotalAssets(), rel=RELATIVE_APPROX) == amount
def test_decrease_debt_ratio(
chain, gov, token, vault, strategy, user, strategist, amount, RELATIVE_APPROX
):
# Deposit to the vault and harvest
actions.user_deposit(user, vault, token, amount)
vault.updateStrategyDebtRatio(strategy.address, 10_000, {"from": gov})
chain.sleep(1)
strategy.harvest({"from": strategist})
assert pytest.approx(strategy.estimatedTotalAssets(), rel=RELATIVE_APPROX) == amount
vault.updateStrategyDebtRatio(strategy.address, 5_000, {"from": gov})
chain.sleep(1)
strategy.harvest({"from": strategist})
half = int(amount / 2)
assert pytest.approx(strategy.estimatedTotalAssets(), rel=RELATIVE_APPROX) == half
def test_sweep(gov, vault, strategy, token, user, amount, weth, weth_amount):
# Strategy want token doesn't work
token.transfer(strategy, amount, {"from": user})
assert token.address == strategy.want()
assert token.balanceOf(strategy) > 0
with brownie.reverts("!want"):
strategy.sweep(token, {"from": gov})
# Vault share token doesn't work
with brownie.reverts("!shares"):
strategy.sweep(vault.address, {"from": gov})
# TODO: If you add protected tokens to the strategy.
# Protected token doesn't work
# with brownie.reverts("!protected"):
# strategy.sweep(strategy.protectedToken(), {"from": gov})
before_balance = weth.balanceOf(gov)
weth.transfer(strategy, weth_amount, {"from": user})
assert weth.address != strategy.want()
assert weth.balanceOf(user) == 0
strategy.sweep(weth, {"from": gov})
assert weth.balanceOf(gov) == weth_amount + before_balance
def test_triggers(chain, gov, vault, strategy, token, amount, user, strategist):
# Deposit to the vault and harvest
actions.user_deposit(user, vault, token, amount)
vault.updateStrategyDebtRatio(strategy.address, 5_000, {"from": gov})
chain.sleep(1)
strategy.harvest()
strategy.harvestTrigger(0)
strategy.tendTrigger(0)