Skip to content

Commit ad9587c

Browse files
test: add set borrow cap tests
1 parent 2beb66a commit ad9587c

File tree

3 files changed

+39
-87
lines changed

3 files changed

+39
-87
lines changed

tests/lending/conftest.py

Lines changed: 13 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,29 @@
11
import boa
22
import pytest
3-
from tests.utils.deployers import FAKE_LEVERAGE_DEPLOYER, ERC20_MOCK_DEPLOYER
4-
5-
@pytest.fixture(scope="module", params=[True, False])
6-
def tokens_for_vault(admin, stablecoin, decimals, request):
7-
stablecoin_is_borrowed = request.param
8-
with boa.env.prank(admin):
9-
token = ERC20_MOCK_DEPLOYER.deploy(decimals)
10-
if stablecoin_is_borrowed:
11-
borrowed_token = stablecoin
12-
collateral_token = token
13-
else:
14-
borrowed_token = token
15-
collateral_token = stablecoin
16-
return borrowed_token, collateral_token
3+
from tests.utils.deployers import FAKE_LEVERAGE_DEPLOYER
4+
from tests.utils.deployers import SEMILOG_MONETARY_POLICY_DEPLOYER
175

186

197
@pytest.fixture(scope="module")
20-
def collateral_token(tokens_for_vault):
21-
return tokens_for_vault[1]
8+
def market_type():
9+
"""Force lending-only markets for tests in this folder."""
10+
return "lending"
2211

2312

2413
@pytest.fixture(scope="module")
25-
def borrowed_token(tokens_for_vault):
26-
return tokens_for_vault[0]
14+
def lending_monetary_policy():
15+
"""Override lending policy to Semilog for all tests in this folder."""
16+
return SEMILOG_MONETARY_POLICY_DEPLOYER
2717

2818

2919
@pytest.fixture(scope="module")
30-
def lending_market(proto, borrowed_token, collateral_token, price_oracle, admin):
20+
def fake_leverage(collateral_token, borrowed_token, controller, admin):
3121
with boa.env.prank(admin):
32-
result = proto.create_lending_market(
33-
borrowed_token=borrowed_token,
34-
collateral_token=collateral_token,
35-
A=100,
36-
fee=int(0.006 * 1e18),
37-
loan_discount=int(0.09 * 1e18),
38-
liquidation_discount=int(0.06 * 1e18),
39-
price_oracle=price_oracle,
40-
name="Test vault",
41-
min_borrow_rate=int(0.005 * 1e18) // (365 * 86400), # 0.5% APR
42-
max_borrow_rate=int(0.5 * 1e18) // (365 * 86400) # 50% APR
43-
)
44-
return result
45-
46-
47-
@pytest.fixture(scope="module")
48-
def vault(lending_market):
49-
return lending_market['vault']
50-
51-
52-
@pytest.fixture(scope="module")
53-
def market_controller(lending_market, admin):
54-
controller = lending_market['controller']
55-
with boa.env.prank(admin):
56-
controller.set_borrow_cap(2**256 - 1)
57-
return controller
58-
59-
60-
@pytest.fixture(scope="module")
61-
def market_amm(lending_market):
62-
return lending_market['amm']
63-
64-
65-
@pytest.fixture(scope="module")
66-
def monetary_policy(market_controller, borrowed_token, admin):
67-
from tests.utils.deployers import SEMILOG_MONETARY_POLICY_DEPLOYER
68-
# Override default policy with Semilog for lending test suite
69-
min_borrow_rate = int(0.005 * 1e18) // (365 * 86400) # 0.5% APR
70-
max_borrow_rate = int(0.5 * 1e18) // (365 * 86400) # 50% APR
71-
with boa.env.prank(admin):
72-
mp = SEMILOG_MONETARY_POLICY_DEPLOYER.deploy(
22+
leverage = FAKE_LEVERAGE_DEPLOYER.deploy(
7323
borrowed_token.address,
74-
min_borrow_rate,
75-
max_borrow_rate,
24+
collateral_token.address,
25+
controller.address,
26+
3000 * 10**18,
7627
)
77-
market_controller.set_monetary_policy(mp)
78-
return mp
79-
80-
81-
@pytest.fixture(scope="module")
82-
def filled_controller(vault, borrowed_token, market_controller, admin):
83-
with boa.env.prank(admin):
84-
amount = 100 * 10**6 * 10**(borrowed_token.decimals())
85-
boa.deal(borrowed_token, admin, amount)
86-
borrowed_token.approve(vault.address, 2**256 - 1)
87-
vault.deposit(amount)
88-
return market_controller
89-
90-
91-
@pytest.fixture(scope="module")
92-
def fake_leverage(collateral_token, borrowed_token, market_controller, admin):
93-
with boa.env.prank(admin):
94-
leverage = FAKE_LEVERAGE_DEPLOYER.deploy(borrowed_token.address, collateral_token.address,
95-
market_controller.address, 3000 * 10**18)
9628
boa.deal(collateral_token, leverage.address, 1000 * 10**collateral_token.decimals())
9729
return leverage

tests/lending/test_set_borrow_cap.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import boa
2+
import pytest
3+
from tests.utils import filter_logs
4+
5+
6+
@pytest.mark.parametrize("new_cap", [0, 12345])
7+
def test_default_behavior(controller, admin, new_cap):
8+
controller.set_borrow_cap(new_cap, sender=admin)
9+
logs = filter_logs(controller, "SetBorrowCap", _strict=True)
10+
assert len(logs) == 1 and logs[-1].borrow_cap == new_cap
11+
assert controller.borrow_cap() == new_cap
12+
13+
14+
def test_set_borrow_cap_non_admin_reverts(controller):
15+
with boa.reverts("only admin"):
16+
controller.set_borrow_cap(1)

tests/utils/deploy.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -232,14 +232,18 @@ def create_lending_market(
232232
amm = AMM_DEPLOYER.at(result[2])
233233

234234
# Optionally override the market's monetary policy after creation.
235-
# By default, factory uses self.blueprints.mpolicy (Semilog policy).
235+
# Important: SemilogMonetaryPolicy expects FACTORY to be msg.sender at deploy time.
236+
# Deploy under the LendingFactory as sender, then set via controller (admin = factory admin).
236237
if mpolicy_deployer is not None:
238+
# Deploy with factory as msg.sender so FACTORY immutable is correct
239+
custom_mp = mpolicy_deployer.deploy(
240+
borrowed_token.address,
241+
min_borrow_rate,
242+
max_borrow_rate,
243+
sender=self.lending_factory.address
244+
)
245+
# Set on controller with admin privileges
237246
with boa.env.prank(self.admin):
238-
custom_mp = mpolicy_deployer.deploy(
239-
borrowed_token.address,
240-
min_borrow_rate,
241-
max_borrow_rate,
242-
)
243247
controller.set_monetary_policy(custom_mp)
244248

245249
# Seed lending markets by depositing borrowed token into the vault

0 commit comments

Comments
 (0)