|
2 | 2 | pragma solidity 0.8.20; |
3 | 3 |
|
4 | 4 | import "forge-std/Test.sol"; |
| 5 | +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; |
5 | 6 | import "../src/FlowYieldVaultsRequests.sol"; |
6 | 7 |
|
| 8 | +contract MockDAI is ERC20 { |
| 9 | + constructor() ERC20("Mock DAI", "DAI") {} |
| 10 | + |
| 11 | + function mint(address to, uint256 amount) external { |
| 12 | + _mint(to, amount); |
| 13 | + } |
| 14 | +} |
| 15 | + |
7 | 16 | contract FlowYieldVaultsRequestsTestHelper is FlowYieldVaultsRequests { |
8 | 17 | constructor(address coaAddress, address wflowAddress) FlowYieldVaultsRequests(coaAddress, wflowAddress) {} |
9 | 18 |
|
@@ -41,11 +50,16 @@ contract FlowYieldVaultsRequestsTest is Test { |
41 | 50 | string constant VAULT_ID = "A.0ae53cb6e3f42a79.FlowToken.Vault"; |
42 | 51 | string constant STRATEGY_ID = "A.045a1763c93006ca.MockStrategies.TracerStrategy"; |
43 | 52 |
|
| 53 | + MockDAI dai; |
| 54 | + |
44 | 55 | function setUp() public { |
45 | 56 | vm.deal(user, 100 ether); |
46 | 57 | vm.deal(user2, 100 ether); |
47 | 58 | c = new FlowYieldVaultsRequestsTestHelper(coa, WFLOW); |
48 | 59 | c.testRegisterYieldVaultId(42, user, NATIVE_FLOW); |
| 60 | + |
| 61 | + dai = new MockDAI(); |
| 62 | + dai.mint(user2, 1 ether); |
49 | 63 | } |
50 | 64 |
|
51 | 65 | function _startProcessingBatch(uint256 requestId) internal { |
@@ -1451,4 +1465,100 @@ contract FlowYieldVaultsRequestsTest is Test { |
1451 | 1465 | )); |
1452 | 1466 | uint256 closeReq = c.closeYieldVault(100); |
1453 | 1467 | } |
| 1468 | + |
| 1469 | + function test_CreateYieldVault_MsgValueValidation() public { |
| 1470 | + vm.startPrank(user); |
| 1471 | + |
| 1472 | + vm.expectRevert(FlowYieldVaultsRequests.MsgValueMustEqualAmount.selector); |
| 1473 | + c.createYieldVault{value: 5 ether}(NATIVE_FLOW, 1 ether, VAULT_ID, STRATEGY_ID); |
| 1474 | + |
| 1475 | + vm.expectRevert(FlowYieldVaultsRequests.MsgValueMustBeZero.selector); |
| 1476 | + c.createYieldVault{value: 5 ether}(WFLOW, 5 ether, VAULT_ID, STRATEGY_ID); |
| 1477 | + |
| 1478 | + vm.stopPrank(); |
| 1479 | + } |
| 1480 | + |
| 1481 | + function test_CreateYieldVault_RevertTokenNotSupported() public { |
| 1482 | + deal(address(dai), user2, 20 ether); |
| 1483 | + assertEq(dai.balanceOf(user2), 20 ether); |
| 1484 | + |
| 1485 | + vm.prank(user2); |
| 1486 | + vm.expectRevert(abi.encodeWithSelector( |
| 1487 | + FlowYieldVaultsRequests.TokenNotSupported.selector, |
| 1488 | + address(dai) |
| 1489 | + )); |
| 1490 | + c.createYieldVault(address(dai), 5 ether, VAULT_ID, STRATEGY_ID); |
| 1491 | + } |
| 1492 | + |
| 1493 | + function test_DepositToYieldVault_MsgValueValidation() public { |
| 1494 | + vm.prank(user); |
| 1495 | + vm.expectRevert(FlowYieldVaultsRequests.MsgValueMustEqualAmount.selector); |
| 1496 | + c.depositToYieldVault{value: 5 ether}(42, NATIVE_FLOW, 1 ether); |
| 1497 | + |
| 1498 | + c.testRegisterYieldVaultId(101, user, WFLOW); |
| 1499 | + vm.expectRevert(FlowYieldVaultsRequests.MsgValueMustBeZero.selector); |
| 1500 | + c.depositToYieldVault{value: 5 ether}(101, WFLOW, 5 ether); |
| 1501 | + } |
| 1502 | + |
| 1503 | + function test_DepositToYieldVault_RevertTokenNotSupported() public { |
| 1504 | + deal(address(dai), user2, 20 ether); |
| 1505 | + assertEq(dai.balanceOf(user2), 20 ether); |
| 1506 | + |
| 1507 | + c.testRegisterYieldVaultId(101, user2, address(dai)); |
| 1508 | + |
| 1509 | + vm.prank(user2); |
| 1510 | + vm.expectRevert(abi.encodeWithSelector( |
| 1511 | + FlowYieldVaultsRequests.TokenNotSupported.selector, |
| 1512 | + address(dai) |
| 1513 | + )); |
| 1514 | + c.depositToYieldVault{value: 5 ether}(101, address(dai), 1 ether); |
| 1515 | + } |
| 1516 | + |
| 1517 | + function test_CompleteProcessing_MsgValueValidation() public { |
| 1518 | + vm.prank(user); |
| 1519 | + uint256 req1 = c.createYieldVault{value: 5 ether}(NATIVE_FLOW, 5 ether, VAULT_ID, STRATEGY_ID); |
| 1520 | + |
| 1521 | + vm.prank(coa); |
| 1522 | + _startProcessingBatch(req1); |
| 1523 | + |
| 1524 | + uint64 sentinelYieldVaultId = c.NO_YIELDVAULT_ID(); |
| 1525 | + vm.prank(coa); |
| 1526 | + vm.expectRevert(FlowYieldVaultsRequests.MsgValueMustEqualAmount.selector); |
| 1527 | + c.completeProcessing{value: 3 ether}(req1, false, sentinelYieldVaultId, "Failed"); |
| 1528 | + |
| 1529 | + c.testRegisterYieldVaultId(101, user2, address(dai)); |
| 1530 | + c.setTokenConfig(address(dai), true, 0.5 ether, false); |
| 1531 | + |
| 1532 | + vm.startPrank(user2); |
| 1533 | + deal(address(dai), user2, 20 ether); |
| 1534 | + dai.approve(address(c), 5 ether); |
| 1535 | + uint256 req2 = c.depositToYieldVault(101, address(dai), 5 ether); |
| 1536 | + vm.stopPrank(); |
| 1537 | + |
| 1538 | + vm.prank(coa); |
| 1539 | + _startProcessingBatch(req2); |
| 1540 | + |
| 1541 | + vm.prank(coa); |
| 1542 | + vm.expectRevert(FlowYieldVaultsRequests.MsgValueMustBeZero.selector); |
| 1543 | + c.completeProcessing{value: 5 ether}(req2, false, 101, "Failed"); |
| 1544 | + } |
| 1545 | + |
| 1546 | + // function test_Stray_tokens() public { |
| 1547 | + // vm.deal(user2, 10 ether); |
| 1548 | + // assertEq(user2.balance, 10 ether); |
| 1549 | + |
| 1550 | + // deal(address(dai), user2, 20 ether); |
| 1551 | + // assertEq(dai.balanceOf(user2), 20 ether); |
| 1552 | + |
| 1553 | + // vm.prank(c.owner()); |
| 1554 | + // c.setTokenConfig(address(dai), true, 0.5 ether, false); |
| 1555 | + |
| 1556 | + // vm.startPrank(user2); |
| 1557 | + // dai.approve(address(c), 5 ether); |
| 1558 | + // uint256 reqId = c.createYieldVault(address(dai), 5 ether, VAULT_ID, STRATEGY_ID); |
| 1559 | + |
| 1560 | + // assertEq(dai.balanceOf(address(c)), 5 ether); |
| 1561 | + |
| 1562 | + // vm.stopPrank(); |
| 1563 | + // } |
1454 | 1564 | } |
0 commit comments