Skip to content

Commit 7f2e434

Browse files
UniswapV2Call.t.sol
1 parent 3a4f1ef commit 7f2e434

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

test/UniswapV2Call.t.sol

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
pragma solidity ^0.8.24;
3+
4+
import {IUniswapV2Callee} from "../src/interfaces/IUniswapV2Callee.sol";
5+
// import {Test, console} from "forge-std/Test.sol";
6+
import {MaglevTestBase} from "./MaglevTestBase.t.sol";
7+
import {MaglevEulerSwap as Maglev} from "../src/MaglevEulerSwap.sol";
8+
9+
contract UniswapV2CallTest is MaglevTestBase {
10+
Maglev public maglev;
11+
SwapCallbackTest swapCallback;
12+
13+
function setUp() public virtual override {
14+
super.setUp();
15+
16+
createMaglev(50e18, 50e18, 0, 1e18, 1e18, 0.4e18, 0.85e18);
17+
18+
swapCallback = new SwapCallbackTest();
19+
}
20+
21+
function createMaglev(
22+
uint112 debtLimit0,
23+
uint112 debtLimit1,
24+
uint256 fee,
25+
uint256 px,
26+
uint256 py,
27+
uint256 cx,
28+
uint256 cy
29+
) internal {
30+
vm.prank(creator);
31+
maglev = new Maglev(
32+
getMaglevBaseParams(debtLimit0, debtLimit1, fee),
33+
Maglev.EulerSwapParams({priceX: px, priceY: py, concentrationX: cx, concentrationY: cy})
34+
);
35+
36+
vm.prank(holder);
37+
evc.setAccountOperator(holder, address(maglev), true);
38+
39+
vm.prank(anyone);
40+
maglev.configure();
41+
}
42+
43+
function test_callback() public {
44+
uint256 amountIn = 1e18;
45+
uint256 amountOut = maglev.quoteExactInput(address(assetTST), address(assetTST2), amountIn);
46+
assertApproxEqAbs(amountOut, 0.9974e18, 0.0001e18);
47+
48+
assetTST.mint(address(this), amountIn);
49+
assetTST.transfer(address(maglev), amountIn);
50+
51+
uint256 randomBalance = 3e18;
52+
vm.prank(anyone);
53+
swapCallback.executeSwap(maglev, 0, amountOut, abi.encode(randomBalance));
54+
assertEq(assetTST2.balanceOf(address(swapCallback)), amountOut);
55+
assertEq(swapCallback.callbackSender(), address(swapCallback));
56+
assertEq(swapCallback.callbackAmount0(), 0);
57+
assertEq(swapCallback.callbackAmount1(), amountOut);
58+
assertEq(swapCallback.randomBalance(), randomBalance);
59+
}
60+
}
61+
62+
contract SwapCallbackTest is IUniswapV2Callee {
63+
address public callbackSender;
64+
uint256 public callbackAmount0;
65+
uint256 public callbackAmount1;
66+
uint256 public randomBalance;
67+
68+
function executeSwap(Maglev maglev, uint256 amountIn, uint256 amountOut, bytes calldata data) external {
69+
maglev.swap(amountIn, amountOut, address(this), data);
70+
}
71+
72+
function uniswapV2Call(address sender, uint256 amount0, uint256 amount1, bytes calldata data) external {
73+
randomBalance = abi.decode(data, (uint256));
74+
75+
callbackSender = sender;
76+
callbackAmount0 = amount0;
77+
callbackAmount1 = amount1;
78+
}
79+
80+
function test_avoid_coverage() public pure {
81+
return;
82+
}
83+
}

0 commit comments

Comments
 (0)