Skip to content

Commit 8238538

Browse files
committed
Add basic delegation tests
1 parent d3ca083 commit 8238538

1 file changed

Lines changed: 69 additions & 13 deletions

File tree

test/CFG.t.sol

Lines changed: 69 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ contract CFGTest is Test {
1414
assertEq(token.decimals(), 18);
1515
}
1616

17-
function testMint(address nonWard, address destination, uint256 amount) public {
17+
function testMint(address nonWard, address destination, uint256 mintAmount) public {
1818
vm.assume(nonWard != address(this));
1919
vm.assume(destination != address(this) && destination != address(0));
2020

@@ -25,36 +25,92 @@ contract CFGTest is Test {
2525

2626
vm.prank(nonWard);
2727
vm.expectRevert(IAuth.NotAuthorized.selector);
28-
token.mint(destination, amount);
28+
token.mint(destination, mintAmount);
2929

3030
assertEq(token.balanceOf(destination), 0);
3131

3232
vm.prank(address(this));
33-
token.mint(destination, amount);
33+
token.mint(destination, mintAmount);
3434

35-
assertEq(token.balanceOf(destination), amount);
35+
assertEq(token.balanceOf(destination), mintAmount);
3636
}
3737

38-
function testBurn(address nonWard, uint256 amountToMint, uint256 amountToBurn) public {
38+
function testBurn(address nonWard, uint256 mintAmount, uint256 burnAmount) public {
3939
vm.assume(nonWard != address(this));
40-
amountToBurn = bound(amountToBurn, 0, amountToMint);
40+
burnAmount = bound(burnAmount, 0, mintAmount);
4141

4242
CFG token = new CFG();
4343

4444
assertEq(token.wards(address(this)), 1);
4545
assertEq(token.wards(nonWard), 0);
4646

47-
vm.prank(address(this));
48-
token.mint(address(this), amountToMint);
49-
50-
assertEq(token.balanceOf(address(this)), amountToMint);
47+
token.mint(address(this), mintAmount);
48+
assertEq(token.balanceOf(address(this)), mintAmount);
5149

5250
vm.prank(nonWard);
5351
vm.expectRevert(IAuth.NotAuthorized.selector);
54-
token.burn(address(this), amountToBurn);
52+
token.burn(address(this), burnAmount);
53+
54+
token.burn(address(this), burnAmount);
55+
assertEq(token.balanceOf(address(this)), mintAmount - burnAmount);
56+
}
57+
58+
function testDelegateVotingPower(
59+
uint256 mintAmount,
60+
uint256 transferAmount,
61+
uint256 transferFromAmount,
62+
uint256 burnAmount,
63+
address delegatee,
64+
address user2,
65+
address delegatee2
66+
) public {
67+
vm.assume(delegatee != address(this) && delegatee != address(0));
68+
vm.assume(user2 != delegatee && user2 != address(this) && user2 != address(0));
69+
vm.assume(
70+
delegatee2 != delegatee && delegatee2 != user2 && delegatee2 != address(this) && delegatee2 != address(0)
71+
);
72+
transferAmount = bound(transferAmount, 0, mintAmount);
73+
transferFromAmount = bound(transferFromAmount, 0, mintAmount - transferAmount);
74+
burnAmount = bound(burnAmount, 0, mintAmount - transferAmount - transferFromAmount);
75+
76+
CFG token = new CFG();
77+
78+
token.mint(address(this), mintAmount);
79+
assertEq(token.balanceOf(address(this)), mintAmount);
80+
81+
assertEq(token.delegatee(address(this)), address(0));
82+
assertEq(token.delegatee(user2), address(0));
83+
assertEq(token.delegatedVotingPower(address(this)), 0);
84+
assertEq(token.delegatedVotingPower(delegatee2), 0);
85+
86+
token.delegate(delegatee);
87+
vm.prank(user2);
88+
token.delegate(delegatee2);
89+
90+
assertEq(token.delegatee(address(this)), delegatee);
91+
assertEq(token.delegatee(user2), delegatee2);
92+
assertEq(token.delegatedVotingPower(delegatee), mintAmount);
93+
assertEq(token.delegatedVotingPower(delegatee2), 0);
94+
95+
token.transfer(user2, transferAmount);
96+
97+
assertEq(token.delegatee(address(this)), delegatee);
98+
assertEq(token.delegatee(user2), delegatee2);
99+
assertEq(token.delegatedVotingPower(delegatee), mintAmount - transferAmount);
100+
assertEq(token.delegatedVotingPower(delegatee2), transferAmount);
101+
102+
token.transferFrom(address(this), user2, transferFromAmount);
103+
104+
assertEq(token.delegatee(address(this)), delegatee);
105+
assertEq(token.delegatee(user2), delegatee2);
106+
assertEq(token.delegatedVotingPower(delegatee), mintAmount - transferAmount - transferFromAmount);
107+
assertEq(token.delegatedVotingPower(delegatee2), transferAmount + transferFromAmount);
55108

56-
token.burn(address(this), amountToBurn);
109+
token.burn(address(this), burnAmount);
57110

58-
assertEq(token.balanceOf(address(this)), amountToMint - amountToBurn);
111+
assertEq(token.delegatee(address(this)), delegatee);
112+
assertEq(token.delegatee(user2), delegatee2);
113+
assertEq(token.delegatedVotingPower(delegatee), mintAmount - transferAmount - transferFromAmount - burnAmount);
114+
assertEq(token.delegatedVotingPower(delegatee2), transferAmount + transferFromAmount);
59115
}
60116
}

0 commit comments

Comments
 (0)