@@ -3,27 +3,14 @@ pragma solidity ^0.8.0;
33
44import '../src/contracts/DonationHandler.sol ' ;
55
6+ import './mocks/FailingMockERC20.sol ' ;
7+ import './mocks/MockERC20.sol ' ;
8+ import './mocks/NoReturnMockERC20.sol ' ;
9+
610import '@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol ' ;
7- import '@openzeppelin/contracts/token/ERC20/ERC20 .sol ' ;
11+ import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20 .sol ' ;
812import 'forge-std/Test.sol ' ;
913
10- // Mock ERC20 token for testing
11- contract MockERC20 is ERC20 {
12- constructor () ERC20 ('MockToken ' , 'MTK ' ) {
13- _mint (msg .sender , 1_000_000 * 10 ** 18 );
14- }
15- }
16-
17- contract FailingMockERC20 is ERC20 {
18- constructor () ERC20 ('FailingToken ' , 'FAIL ' ) {
19- _mint (msg .sender , 1_000_000 * 10 ** 18 );
20- }
21-
22- function transferFrom (address , address , uint256 ) public pure override returns (bool ) {
23- return false ;
24- }
25- }
26-
2714contract DonationHandlerTest is Test {
2815 DonationHandler public donationHandler;
2916 MockERC20 public mockToken;
@@ -262,10 +249,23 @@ contract DonationHandlerTest is Test {
262249 uint256 amount = 100 * 10 ** 18 ;
263250 failingToken.approve (address (donationHandler), amount);
264251
265- vm.expectRevert (' ERC20 transfer failed ' );
252+ vm.expectRevert (abi.encodeWithSelector (SafeERC20.SafeERC20FailedOperation. selector , address (failingToken)) );
266253 donationHandler.donateERC20 (address (failingToken), recipient1, amount, data);
267254 }
268255
256+ function test_WhenMakingERC20DonationWithNoReturnToken () external {
257+ NoReturnMockERC20 noReturnToken = new NoReturnMockERC20 ();
258+ uint256 donationAmount = 100 * (10 ** uint256 (noReturnToken.decimals ()));
259+ bytes memory data = '' ;
260+
261+ noReturnToken.approve (address (donationHandler), donationAmount);
262+
263+ _expectDonationEvent (recipient1, donationAmount, address (noReturnToken));
264+ donationHandler.donateERC20 (address (noReturnToken), recipient1, donationAmount, data);
265+
266+ assertEq (noReturnToken.balanceOf (recipient1), donationAmount);
267+ }
268+
269269 function test_RevertWhen_InitializingTwice () external {
270270 vm.expectRevert (Initializable.InvalidInitialization.selector );
271271 donationHandler.initialize ();
0 commit comments