Skip to content

Commit e5c722b

Browse files
more tests for 100% coverage
1 parent b728963 commit e5c722b

File tree

2 files changed

+90
-2
lines changed

2 files changed

+90
-2
lines changed

src/interfaces/IEulerSwapFactory.sol

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ interface IEulerSwapFactory {
6666
/// @param start The starting index of the slice (inclusive)
6767
/// @param end The ending index of the slice (exclusive)
6868
/// @return An array containing the requested slice of pool addresses for the asset pair
69-
function poolsByPairSlice(address asset0, address asset1, uint256 start, uint256 end) external view returns (address[] memory);
69+
function poolsByPairSlice(address asset0, address asset1, uint256 start, uint256 end)
70+
external
71+
view
72+
returns (address[] memory);
7073

7174
/// @notice Returns all pools for a specific asset pair
7275
/// @dev Returns the complete array of pool addresses for the given asset pair

test/EulerSwapFactoryTest.t.sol

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
1414

1515
vm.prank(creator);
1616
eulerSwapFactory = new EulerSwapFactory(address(evc), address(factory));
17+
18+
assertEq(eulerSwapFactory.EVC(), address(evc));
1719
}
1820

1921
function testDeployPool() public {
@@ -157,11 +159,39 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
157159
assertEq(pool, predictedAddress);
158160
}
159161

160-
function testInvalidPoolsSliceQuery() public {
162+
function testInvalidPoolsSliceOutOfBounds() public {
161163
vm.expectRevert(EulerSwapFactory.SliceOutOfBounds.selector);
162164
eulerSwapFactory.poolsSlice(1, 0);
163165
}
164166

167+
function testDeployWithInvalidVaultImplementation() public {
168+
bytes32 salt = bytes32(uint256(1234));
169+
IEulerSwap.Params memory poolParams =
170+
IEulerSwap.Params(address(eTST), address(eTST2), holder, 1e18, 1e18, 1e18, 1e18, 0);
171+
IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams(0.4e18, 0.85e18, 1e18, 1e18);
172+
173+
// Create a fake vault that's not deployed by the factory
174+
address fakeVault = address(0x1234);
175+
poolParams.vault0 = fakeVault;
176+
poolParams.vault1 = address(eTST2);
177+
178+
vm.prank(holder);
179+
vm.expectRevert(EulerSwapFactory.InvalidVaultImplementation.selector);
180+
eulerSwapFactory.deployPool(poolParams, curveParams, salt);
181+
}
182+
183+
function testDeployWithUnauthorizedCaller() public {
184+
bytes32 salt = bytes32(uint256(1234));
185+
IEulerSwap.Params memory poolParams =
186+
IEulerSwap.Params(address(eTST), address(eTST2), holder, 1e18, 1e18, 1e18, 1e18, 0);
187+
IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams(0.4e18, 0.85e18, 1e18, 1e18);
188+
189+
// Call from a different address than the euler account
190+
vm.prank(address(0x1234));
191+
vm.expectRevert(EulerSwapFactory.Unauthorized.selector);
192+
eulerSwapFactory.deployPool(poolParams, curveParams, salt);
193+
}
194+
165195
function testDeployWithAssetsOutOfOrderOrEqual() public {
166196
bytes32 salt = bytes32(uint256(1234));
167197
IEulerSwap.Params memory poolParams =
@@ -184,6 +214,61 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
184214
eulerSwapFactory.deployPool(poolParams, curveParams, salt);
185215
}
186216

217+
function testPoolsByPair() public {
218+
// First deploy a pool
219+
bytes32 salt = bytes32(uint256(1234));
220+
IEulerSwap.Params memory poolParams =
221+
IEulerSwap.Params(address(eTST), address(eTST2), holder, 1e18, 1e18, 1e18, 1e18, 0);
222+
IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams(0.4e18, 0.85e18, 1e18, 1e18);
223+
224+
address predictedAddress = predictPoolAddress(address(eulerSwapFactory), poolParams, curveParams, salt);
225+
226+
IEVC.BatchItem[] memory items = new IEVC.BatchItem[](2);
227+
items[0] = IEVC.BatchItem({
228+
onBehalfOfAccount: address(0),
229+
targetContract: address(evc),
230+
value: 0,
231+
data: abi.encodeCall(evc.setAccountOperator, (holder, predictedAddress, true))
232+
});
233+
items[1] = IEVC.BatchItem({
234+
onBehalfOfAccount: holder,
235+
targetContract: address(eulerSwapFactory),
236+
value: 0,
237+
data: abi.encodeCall(EulerSwapFactory.deployPool, (poolParams, curveParams, salt))
238+
});
239+
240+
vm.prank(holder);
241+
evc.batch(items);
242+
243+
// Get the deployed pool and its assets
244+
address pool = eulerSwapFactory.poolByHolder(holder);
245+
address asset0 = EulerSwap(pool).asset0();
246+
address asset1 = EulerSwap(pool).asset1();
247+
248+
// Test poolsByPairLength
249+
assertEq(eulerSwapFactory.poolsByPairLength(asset0, asset1), 1);
250+
251+
// Test poolsByPairSlice
252+
address[] memory slice = eulerSwapFactory.poolsByPairSlice(asset0, asset1, 0, 1);
253+
assertEq(slice.length, 1);
254+
assertEq(slice[0], predictedAddress);
255+
256+
// Test poolsByPair
257+
address[] memory pools = eulerSwapFactory.poolsByPair(asset0, asset1);
258+
assertEq(pools.length, 1);
259+
assertEq(pools[0], predictedAddress);
260+
}
261+
262+
function testComputePoolAddress() public view {
263+
bytes32 salt = bytes32(uint256(1234));
264+
IEulerSwap.Params memory poolParams =
265+
IEulerSwap.Params(address(eTST), address(eTST2), holder, 1e18, 1e18, 1e18, 1e18, 0);
266+
IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams(0.4e18, 0.85e18, 1e18, 1e18);
267+
268+
address predictedAddress = eulerSwapFactory.computePoolAddress(poolParams, curveParams, salt);
269+
assertEq(predictedAddress, predictPoolAddress(address(eulerSwapFactory), poolParams, curveParams, salt));
270+
}
271+
187272
function predictPoolAddress(
188273
address factoryAddress,
189274
IEulerSwap.Params memory poolParams,

0 commit comments

Comments
 (0)