Skip to content

Commit 3e1b03f

Browse files
MikeHathawayMike
andauthored
add additional unit tests demonstrating delegation flows (#138)
Co-authored-by: Mike <[email protected]>
1 parent 640d5c9 commit 3e1b03f

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

test/unit/AjnaToken.t.sol

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,106 @@ contract AjnaTokenTest is Test {
235235
assertEq(_token.getPastVotes(delegate2, 11112), 1_000 * 1e18);
236236
}
237237

238+
function testMultipleSelfDelegation() external {
239+
address delegator = address(2222);
240+
address delegate1 = address(3333);
241+
242+
// set delegator balance to 1_000 AJNA tokens
243+
deal(address(_token), delegator, 1_000 * 1e18);
244+
245+
// check voting power
246+
assertEq(_token.getVotes(delegator), 0);
247+
assertEq(_token.getVotes(delegate1), 0);
248+
249+
vm.roll(11111);
250+
changePrank(delegator);
251+
vm.expectEmit(true, true, false, true);
252+
emit DelegateChanged(delegator, address(0), delegator);
253+
vm.expectEmit(true, true, false, true);
254+
emit DelegateVotesChanged(delegator, 0, 1_000 * 1e18);
255+
_token.delegate(delegator);
256+
257+
// check accounts balances
258+
assertEq(_token.balanceOf(delegator), 1_000 * 1e18);
259+
assertEq(_token.balanceOf(delegate1), 0);
260+
// check voting power
261+
assertEq(_token.getVotes(delegator), 1_000 * 1e18);
262+
assertEq(_token.getVotes(delegate1), 0);
263+
264+
assertEq(_token.delegates(delegator), delegator);
265+
266+
// additional tokens are transferred to delegator
267+
vm.roll(11121);
268+
changePrank(_tokenHolder);
269+
uint256 addAmount = 1 * 1e18;
270+
_token.approve(_tokenHolder, addAmount);
271+
vm.expectEmit(true, true, false, true);
272+
emit Transfer(_tokenHolder, delegator, addAmount);
273+
vm.expectEmit(true, true, false, true);
274+
emit DelegateVotesChanged(delegator, 1_000 * 1e18, 1_001 * 1e18);
275+
_token.transferFrom(_tokenHolder, delegator, addAmount);
276+
277+
// check accounts balances
278+
assertEq(_token.balanceOf(delegator), 1_001 * 1e18);
279+
assertEq(_token.balanceOf(delegate1), 0);
280+
// check voting power
281+
assertEq(_token.getVotes(delegator), 1_001 * 1e18);
282+
assertEq(_token.getVotes(delegate1), 0);
283+
}
284+
285+
function testMultipleDelegationDifferentDelegatee() external {
286+
address delegator = address(2222);
287+
address delegate1 = address(3333);
288+
address delegate2 = address(4444);
289+
290+
// set delegator balance to 1_000 AJNA tokens
291+
deal(address(_token), delegator, 1_000 * 1e18);
292+
293+
// check voting power
294+
assertEq(_token.getVotes(delegator), 0);
295+
assertEq(_token.getVotes(delegate1), 0);
296+
assertEq(_token.getVotes(delegate2), 0);
297+
298+
vm.roll(11111);
299+
changePrank(delegator);
300+
vm.expectEmit(true, true, false, true);
301+
emit DelegateChanged(delegator, address(0), delegate1);
302+
vm.expectEmit(true, true, false, true);
303+
emit DelegateVotesChanged(delegate1, 0, 1_000 * 1e18);
304+
_token.delegate(delegate1);
305+
306+
// check accounts balances
307+
assertEq(_token.balanceOf(delegator), 1_000 * 1e18);
308+
assertEq(_token.balanceOf(delegate1), 0);
309+
assertEq(_token.balanceOf(delegate2), 0);
310+
// check voting power
311+
assertEq(_token.getVotes(delegator), 0);
312+
assertEq(_token.getVotes(delegate1), 1_000 * 1e18);
313+
assertEq(_token.getVotes(delegate2), 0);
314+
315+
assertEq(_token.delegates(delegator), delegate1);
316+
317+
// additional tokens are transferred to delegator
318+
vm.roll(11121);
319+
changePrank(_tokenHolder);
320+
uint256 addAmount = 2_000 * 1e18;
321+
_token.approve(_tokenHolder, addAmount);
322+
vm.expectEmit(true, true, false, true);
323+
emit Transfer(_tokenHolder, delegator, addAmount);
324+
vm.expectEmit(true, true, false, true);
325+
emit DelegateVotesChanged(delegate1, 1_000 * 1e18, 3_000 * 1e18);
326+
_token.transferFrom(_tokenHolder, delegator, addAmount);
327+
328+
// check accounts balances
329+
assertEq(_token.balanceOf(delegator), 3_000 * 1e18);
330+
assertEq(_token.balanceOf(delegate1), 0);
331+
assertEq(_token.balanceOf(delegate2), 0);
332+
// check voting power
333+
assertEq(_token.getVotes(delegator), 0);
334+
assertEq(_token.getVotes(delegate1), 3_000 * 1e18);
335+
assertEq(_token.getVotes(delegate2), 0);
336+
}
337+
238338
function testCalculateVotingPower() external {
239339
address delegator1 = address(1111);
240340
address delegator2 = address(2222);

0 commit comments

Comments
 (0)