@@ -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