From 18472d81ae94e83b3348f9542a3cb7ba65c48ec6 Mon Sep 17 00:00:00 2001 From: Adrien Husson Date: Wed, 18 Dec 2024 02:43:42 +0100 Subject: [PATCH 1/2] test: add metamorpho mock --- src/mocks/MetaMorphoMock.sol | 27 +++++++++++++++++ test/forge/MetaMorphoInternalTest.sol | 42 +++++++++++++++++++++------ test/forge/helpers/InternalTest.sol | 23 --------------- 3 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 src/mocks/MetaMorphoMock.sol delete mode 100644 test/forge/helpers/InternalTest.sol diff --git a/src/mocks/MetaMorphoMock.sol b/src/mocks/MetaMorphoMock.sol new file mode 100644 index 00000000..8e9857d1 --- /dev/null +++ b/src/mocks/MetaMorphoMock.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.26; + +import "../MetaMorpho.sol"; + +contract MetaMorphoMock is MetaMorpho { + constructor( + address owner, + address morpho, + uint256 initialTimelock, + address _asset, + string memory __name, + string memory __symbol + ) MetaMorpho(owner, morpho, initialTimelock, _asset, __name, __symbol) {} + + function mockSetCap(MarketParams memory marketParams, Id id, uint184 supplyCap) external { + _setCap(marketParams, id, supplyCap); + } + + function mockSimulateWithdrawMorpho(uint256 assets) external view returns (uint256) { + return _simulateWithdrawMorpho(assets); + } + + function mockSetSupplyQueue(Id[] memory ids) external { + supplyQueue = ids; + } +} diff --git a/test/forge/MetaMorphoInternalTest.sol b/test/forge/MetaMorphoInternalTest.sol index ae9f13e7..f5332c75 100644 --- a/test/forge/MetaMorphoInternalTest.sol +++ b/test/forge/MetaMorphoInternalTest.sol @@ -4,9 +4,10 @@ pragma solidity ^0.8.0; import {UtilsLib} from "../../lib/morpho-blue/src/libraries/UtilsLib.sol"; import {SharesMathLib} from "../../lib/morpho-blue/src/libraries/SharesMathLib.sol"; -import "./helpers/InternalTest.sol"; +import "./helpers/BaseTest.sol"; +import {MetaMorphoMock} from "../../src/mocks/MetaMorphoMock.sol"; -contract MetaMorphoInternalTest is InternalTest { +contract MetaMorphoInternalTest is BaseTest { using MathLib for uint256; using MorphoLib for IMorpho; using MorphoBalancesLib for IMorpho; @@ -14,25 +15,47 @@ contract MetaMorphoInternalTest is InternalTest { using SharesMathLib for uint256; using UtilsLib for uint256; + MetaMorphoMock internal metaMorphoMock; + + function setUp() public virtual override { + super.setUp(); + + metaMorphoMock = + new MetaMorphoMock(OWNER, address(morpho), 1 days, address(loanToken), "MetaMorpho Vault", "MM"); + + vm.startPrank(OWNER); + metaMorphoMock.setCurator(CURATOR); + metaMorphoMock.setIsAllocator(ALLOCATOR, true); + vm.stopPrank(); + + vm.startPrank(SUPPLIER); + loanToken.approve(address(metaMorphoMock), type(uint256).max); + collateralToken.approve(address(metaMorphoMock), type(uint256).max); + vm.stopPrank(); + } + function testSetCapMaxQueueLengthExcedeed() public { for (uint256 i; i < NB_MARKETS - 1; ++i) { - _setCap(allMarkets[i], allMarkets[i].id(), CAP); + metaMorphoMock.mockSetCap(allMarkets[i], allMarkets[i].id(), CAP); } vm.expectRevert(ErrorsLib.MaxQueueLengthExceeded.selector); - _setCap(allMarkets[NB_MARKETS - 1], allMarkets[NB_MARKETS - 1].id(), CAP); + metaMorphoMock.mockSetCap(allMarkets[NB_MARKETS - 1], allMarkets[NB_MARKETS - 1].id(), CAP); } function testSimulateWithdraw(uint256 suppliedAmount, uint256 borrowedAmount, uint256 assets) public { suppliedAmount = bound(suppliedAmount, MIN_TEST_ASSETS, MAX_TEST_ASSETS); borrowedAmount = bound(borrowedAmount, MIN_TEST_ASSETS, suppliedAmount); - _setCap(allMarkets[0], allMarkets[0].id(), CAP); - supplyQueue = [allMarkets[0].id()]; + metaMorphoMock.mockSetCap(allMarkets[0], allMarkets[0].id(), CAP); + + Id[] memory ids = new Id[](1); + ids[0] = allMarkets[0].id(); + metaMorphoMock.mockSetSupplyQueue(ids); loanToken.setBalance(SUPPLIER, suppliedAmount); vm.prank(SUPPLIER); - this.deposit(suppliedAmount, SUPPLIER); + metaMorphoMock.deposit(suppliedAmount, SUPPLIER); uint256 collateral = suppliedAmount.wDivUp(allMarkets[0].lltv); collateralToken.setBalance(BORROWER, collateral); @@ -42,9 +65,10 @@ contract MetaMorphoInternalTest is InternalTest { morpho.borrow(allMarkets[0], borrowedAmount, 0, BORROWER, BORROWER); vm.stopPrank(); - uint256 remaining = _simulateWithdrawMorpho(assets); + uint256 remaining = metaMorphoMock.mockSimulateWithdrawMorpho(assets); - uint256 expectedWithdrawable = MORPHO.expectedSupplyAssets(allMarkets[0], address(this)) - borrowedAmount; + uint256 expectedWithdrawable = + morpho.expectedSupplyAssets(allMarkets[0], address(metaMorphoMock)) - borrowedAmount; uint256 expectedRemaining = assets.zeroFloorSub(expectedWithdrawable); assertEq(remaining, expectedRemaining, "remaining"); diff --git a/test/forge/helpers/InternalTest.sol b/test/forge/helpers/InternalTest.sol deleted file mode 100644 index 725ff830..00000000 --- a/test/forge/helpers/InternalTest.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.8.0; - -import "./BaseTest.sol"; -import {MetaMorpho} from "../../../src/MetaMorpho.sol"; - -contract InternalTest is BaseTest, MetaMorpho { - constructor() MetaMorpho(OWNER, address(morpho), 1 days, address(loanToken), "MetaMorpho Vault", "MM") {} - - function setUp() public virtual override { - super.setUp(); - - vm.startPrank(OWNER); - this.setCurator(CURATOR); - this.setIsAllocator(ALLOCATOR, true); - vm.stopPrank(); - - vm.startPrank(SUPPLIER); - loanToken.approve(address(this), type(uint256).max); - collateralToken.approve(address(this), type(uint256).max); - vm.stopPrank(); - } -} From e7e2ba1de0987a79f7bb92dc1b04e29a4e7687a7 Mon Sep 17 00:00:00 2001 From: MathisGD Date: Thu, 19 Dec 2024 22:27:16 +0100 Subject: [PATCH 2/2] test: fix compilation --- src/mocks/MetaMorphoMock.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mocks/MetaMorphoMock.sol b/src/mocks/MetaMorphoMock.sol index 8e9857d1..34a7fb53 100644 --- a/src/mocks/MetaMorphoMock.sol +++ b/src/mocks/MetaMorphoMock.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.26; -import "../MetaMorpho.sol"; +import "../MetaMorphoV1_1.sol"; -contract MetaMorphoMock is MetaMorpho { +contract MetaMorphoMock is MetaMorphoV1_1 { constructor( address owner, address morpho, @@ -11,7 +11,7 @@ contract MetaMorphoMock is MetaMorpho { address _asset, string memory __name, string memory __symbol - ) MetaMorpho(owner, morpho, initialTimelock, _asset, __name, __symbol) {} + ) MetaMorphoV1_1(owner, morpho, initialTimelock, _asset, __name, __symbol) {} function mockSetCap(MarketParams memory marketParams, Id id, uint184 supplyCap) external { _setCap(marketParams, id, supplyCap);