Skip to content

Commit 54ef64b

Browse files
test: Native currency split revenue tested
1 parent 0d52af1 commit 54ef64b

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

test/ATokenVaultRevenueSplitterOwner.t.sol

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,4 +462,85 @@ contract ATokenVaultRevenueSplitterOwnerTest is Test {
462462
// The remaining unsplit amount is capped to the be strictly less than the number of recipients
463463
assertLe(assetToSplit.balanceOf(address(revenueSplitterOwner)), recipients.length - 1);
464464
}
465+
466+
function test_splitRevenue_distributesRevenueToAllRecipientsAccordingToTheirShares_NativeCurrency() public {
467+
uint256 amountToSplit = 250_000;
468+
469+
assertEq(address(revenueSplitterOwner).balance, 0);
470+
assertEq(address(recipientI).balance, 0);
471+
assertEq(address(recipientII).balance, 0);
472+
assertEq(address(recipientIII).balance, 0);
473+
474+
vm.deal(address(revenueSplitterOwner), amountToSplit);
475+
476+
assertEq(address(revenueSplitterOwner).balance, amountToSplit);
477+
478+
revenueSplitterOwner.splitRevenue();
479+
480+
assertEq(address(revenueSplitterOwner).balance, 0);
481+
assertEq(address(recipientI).balance, 25_000);
482+
assertEq(address(recipientII).balance, 50_000);
483+
assertEq(address(recipientIII).balance, 175_000);
484+
}
485+
486+
function test_splitRevenue_emitsExpectedEvents_NativeCurrency() public {
487+
uint256 amountToSplit = 1_000;
488+
489+
vm.deal(address(revenueSplitterOwner), amountToSplit);
490+
491+
vm.expectEmit(true, true, true, true);
492+
emit RevenueSplit(address(recipientI), address(0), 100);
493+
vm.expectEmit(true, true, true, true);
494+
emit RevenueSplit(address(recipientII), address(0), 200);
495+
vm.expectEmit(true, true, true, true);
496+
emit RevenueSplit(address(recipientIII), address(0), 700);
497+
498+
revenueSplitterOwner.splitRevenue();
499+
}
500+
501+
function test_splitRevenue_canBeCalledByAnyone_NativeCurrency(address msgSender) public {
502+
uint256 amountToSplit = 1_000;
503+
504+
assertEq(address(revenueSplitterOwner).balance, 0);
505+
assertEq(address(recipientI).balance, 0);
506+
assertEq(address(recipientII).balance, 0);
507+
assertEq(address(recipientIII).balance, 0);
508+
509+
vm.deal(address(revenueSplitterOwner), amountToSplit);
510+
511+
assertEq(address(revenueSplitterOwner).balance, amountToSplit);
512+
513+
vm.prank(msgSender);
514+
revenueSplitterOwner.splitRevenue();
515+
516+
assertEq(address(revenueSplitterOwner).balance, 0);
517+
assertEq(address(recipientI).balance, 100);
518+
assertEq(address(recipientII).balance, 200);
519+
assertEq(address(recipientIII).balance, 700);
520+
}
521+
522+
function test_splitRevenue_distributesRevenueToAllRecipientsAccordingToTheirShares_FuzzAmount_NativeCurrency(
523+
uint256 amountToSplit
524+
) public {
525+
amountToSplit = bound(amountToSplit, 0, type(uint240).max);
526+
527+
assertEq(address(revenueSplitterOwner).balance, 0);
528+
assertEq(address(recipientI).balance, 0);
529+
assertEq(address(recipientII).balance, 0);
530+
assertEq(address(recipientIII).balance, 0);
531+
532+
vm.deal(address(revenueSplitterOwner), amountToSplit);
533+
534+
assertEq(address(revenueSplitterOwner).balance, amountToSplit);
535+
536+
revenueSplitterOwner.splitRevenue();
537+
538+
assertEq(address(recipientI).balance, amountToSplit * shareI / 10_000);
539+
assertEq(address(recipientII).balance, amountToSplit * shareII / 10_000);
540+
assertEq(address(recipientIII).balance, amountToSplit * shareIII / 10_000);
541+
542+
// The remaining unsplit amount is capped to the be strictly less than the number of recipients
543+
assertLe(address(revenueSplitterOwner).balance, recipients.length - 1);
544+
}
545+
465546
}

0 commit comments

Comments
 (0)