Skip to content

Commit b82202f

Browse files
committed
Completed the test and got my coverage to 100%
1 parent 6c2fdae commit b82202f

File tree

2 files changed

+229
-4
lines changed

2 files changed

+229
-4
lines changed

lcov.info

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
TN:
2+
SF:src/RebaseToken.sol
3+
DA:33,12
4+
FN:33,RebaseToken.grantMintAndBurnRole
5+
FNDA:12,RebaseToken.grantMintAndBurnRole
6+
DA:34,12
7+
DA:42,777
8+
FN:42,RebaseToken.setInterestRate
9+
FNDA:777,RebaseToken.setInterestRate
10+
DA:44,518
11+
BRDA:44,0,0,259
12+
DA:45,259
13+
DA:50,259
14+
DA:51,259
15+
DA:59,518
16+
FN:59,RebaseToken.getPrincipleBalanceOf
17+
FNDA:518,RebaseToken.getPrincipleBalanceOf
18+
DA:62,518
19+
DA:70,2072
20+
FN:70,RebaseToken.mint
21+
FNDA:2072,RebaseToken.mint
22+
DA:74,2071
23+
DA:75,2071
24+
DA:76,2071
25+
DA:84,519
26+
FN:84,RebaseToken.burn
27+
FNDA:519,RebaseToken.burn
28+
DA:88,518
29+
DA:89,518
30+
DA:92,5695
31+
FN:92,RebaseToken.balanceOf
32+
FNDA:5695,RebaseToken.balanceOf
33+
DA:95,11392
34+
DA:96,11392
35+
DA:107,518
36+
FN:107,RebaseToken.transfer
37+
FNDA:518,RebaseToken.transfer
38+
DA:111,518
39+
DA:112,518
40+
DA:113,518
41+
BRDA:113,1,0,-
42+
DA:114,0
43+
DA:116,518
44+
BRDA:116,2,0,518
45+
DA:117,518
46+
DA:119,518
47+
DA:129,518
48+
FN:129,RebaseToken.transferFrom
49+
FNDA:518,RebaseToken.transferFrom
50+
DA:134,518
51+
DA:135,518
52+
DA:136,518
53+
BRDA:136,3,0,-
54+
DA:137,0
55+
DA:139,518
56+
BRDA:139,4,0,518
57+
DA:140,518
58+
DA:142,518
59+
DA:150,11392
60+
FN:150,RebaseToken._calculateUserAccumulatedInterestSinceUpdate
61+
FNDA:11392,RebaseToken._calculateUserAccumulatedInterestSinceUpdate
62+
DA:157,11392
63+
DA:159,11392
64+
DA:167,4661
65+
FN:167,RebaseToken._mintAccruedInterest
66+
FNDA:4661,RebaseToken._mintAccruedInterest
67+
DA:169,4661
68+
DA:171,4661
69+
DA:173,4661
70+
DA:175,4661
71+
DA:177,4661
72+
DA:184,518
73+
FN:184,RebaseToken.getInterestRate
74+
FNDA:518,RebaseToken.getInterestRate
75+
DA:185,518
76+
DA:193,1036
77+
FN:193,RebaseToken.getUserInterestrate
78+
FNDA:1036,RebaseToken.getUserInterestrate
79+
DA:196,1036
80+
FNF:12
81+
FNH:12
82+
LF:48
83+
LH:46
84+
BRF:5
85+
BRH:3
86+
end_of_record
87+
TN:
88+
SF:src/Vault.sol
89+
DA:19,12
90+
FN:19,Vault.constructor
91+
FNDA:12,Vault.constructor
92+
DA:20,12
93+
DA:28,2071
94+
FN:28,Vault.deposit
95+
FNDA:2071,Vault.deposit
96+
DA:30,2071
97+
DA:31,2071
98+
DA:38,518
99+
FN:38,Vault.redeem
100+
FNDA:518,Vault.redeem
101+
DA:39,518
102+
BRDA:39,0,0,518
103+
DA:40,518
104+
DA:43,518
105+
DA:45,518
106+
DA:46,518
107+
BRDA:46,1,0,-
108+
DA:47,0
109+
DA:49,518
110+
DA:56,1
111+
FN:56,Vault.getRebaseTokenAddress
112+
FNDA:1,Vault.getRebaseTokenAddress
113+
DA:57,1
114+
FNF:4
115+
FNH:4
116+
LF:15
117+
LH:14
118+
BRF:2
119+
BRH:1
120+
end_of_record

test/RebaseToken.t.sol

Lines changed: 109 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,8 @@ contract RebaseTokenTest is Test {
198198
);
199199
}
200200

201-
function testTransferFromWithAllowance(
202-
uint256 allowance /*uint256 amount */
203-
) public {
201+
function testTransferFromWithAllowance(uint256 allowance) public {
204202
allowance = bound(allowance, 1e5, type(uint96).max);
205-
//amount = bound(amount, 1e5, type(uint96).max);
206203

207204
vm.deal(owner, allowance);
208205
vm.prank(owner);
@@ -229,4 +226,112 @@ contract RebaseTokenTest is Test {
229226
assertEq(user1BalanceAfter, user1Balance + allowance);
230227
assertEq(userAllowanceAfter, userAllowanceBefore - allowance);
231228
}
229+
230+
function testTransferFromWithMaxUintAllowance(
231+
uint256 depositAmount,
232+
uint256 amountSent
233+
) public {
234+
depositAmount = bound(depositAmount, 1e5 + 1e5, type(uint96).max);
235+
amountSent = bound(amountSent, 1e5, depositAmount - 1e5);
236+
237+
// fund owner with Eth and Deposit into vault
238+
vm.deal(owner, depositAmount);
239+
vm.prank(owner);
240+
vault.deposit{value: depositAmount}();
241+
242+
// Approve spender with Max uint256 allowance
243+
vm.prank(owner);
244+
rebaseToken.approve(user, type(uint256).max);
245+
246+
address user1 = makeAddr("user1");
247+
uint256 ownerBalance = rebaseToken.balanceOf(owner);
248+
uint256 user1Balance = rebaseToken.balanceOf(user1);
249+
uint256 userAllowanceBefore = rebaseToken.allowance(owner, user);
250+
console.log("Owner's Balance", ownerBalance);
251+
console.log("User1 Balance", user1Balance);
252+
console.log("User's Allowance Before", userAllowanceBefore);
253+
254+
vm.prank(user);
255+
rebaseToken.transferFrom(owner, user1, amountSent);
256+
257+
uint256 ownerBalanceAfter = rebaseToken.balanceOf(owner);
258+
uint256 user1BalanceAfter = rebaseToken.balanceOf(user1);
259+
uint256 userAllowanceAfter = rebaseToken.allowance(owner, user);
260+
261+
// Assert the balances and allowance are updated correctly
262+
assertEq(ownerBalanceAfter, ownerBalance - amountSent);
263+
assertEq(user1BalanceAfter, user1Balance + amountSent);
264+
265+
//If allowance was uint256.max, it should not reduce
266+
assertEq(userAllowanceAfter, type(uint256).max);
267+
}
268+
269+
function testTransferWithMaxAmount(uint256 depositAmount) public {
270+
depositAmount = bound(depositAmount, 1e5, type(uint96).max);
271+
272+
vm.deal(user, depositAmount);
273+
vm.prank(user);
274+
vault.deposit{value: depositAmount}();
275+
276+
address user1 = makeAddr("user1");
277+
vm.prank(user);
278+
rebaseToken.transfer(user1, type(uint256).max);
279+
280+
uint256 userBalance = rebaseToken.balanceOf(user);
281+
uint256 user1Balance = rebaseToken.balanceOf(user1);
282+
283+
assertEq(userBalance, 0);
284+
assertEq(user1Balance, depositAmount);
285+
}
286+
287+
function testTransferFromWithMaxUintAmount(uint256 amount) public {
288+
amount = bound(amount, 1e5, type(uint96).max);
289+
290+
vm.deal(owner, amount);
291+
vm.prank(owner);
292+
vault.deposit{value: amount}();
293+
294+
vm.prank(owner);
295+
rebaseToken.approve(user, type(uint256).max);
296+
address user1 = makeAddr("user1");
297+
298+
uint256 ownerBalance = rebaseToken.balanceOf(owner);
299+
uint256 user1Balance = rebaseToken.balanceOf(user1);
300+
301+
vm.prank(user);
302+
rebaseToken.transferFrom(owner, user1, type(uint256).max);
303+
304+
uint256 ownerBalanceAfter = rebaseToken.balanceOf(owner);
305+
uint256 user1BalanceAfter = rebaseToken.balanceOf(user1);
306+
307+
// Assert the balances and allowance are updated correctly
308+
assertEq(ownerBalanceAfter, ownerBalance - amount);
309+
assertEq(user1BalanceAfter, user1Balance + amount);
310+
}
311+
312+
function testRedeemFailsIfEthTransferFails(uint256 amount) public {
313+
amount = bound(amount, 1e5, type(uint96).max);
314+
RevertingReceiver badReceiver = new RevertingReceiver();
315+
316+
// Give it some RebaseTokens
317+
vm.deal(address(badReceiver), 0);
318+
vm.deal(address(this), amount);
319+
320+
// Deposit from this contract and transfer to badReceiver
321+
vault.deposit{value: amount}();
322+
rebaseToken.transfer(address(badReceiver), amount);
323+
324+
// Try redeeming from badReceiver
325+
vm.expectRevert(Vault.Vault__RedeemFailed.selector);
326+
vm.prank(address(badReceiver));
327+
vault.redeem(type(uint256).max);
328+
}
329+
}
330+
331+
contract RevertingReceiver {
332+
// fallback that rejects ETH
333+
334+
receive() external payable {
335+
revert("Can't accept ETH");
336+
}
232337
}

0 commit comments

Comments
 (0)