Skip to content

Commit 72080d3

Browse files
committed
test: add provider registration unit tests with approval, rejection, and withdrawal scenarios
1 parent 9f0279d commit 72080d3

1 file changed

Lines changed: 125 additions & 1 deletion

File tree

test/discovery/Registration.t.sol

Lines changed: 125 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@ contract RegistrationTest is DiscoveryTestBase {
209209
Flyover.ProviderType.PegIn
210210
);
211211

212+
vm.prank(owner);
213+
discovery.approveRegistration(lp);
214+
212215
// Second registration by the same EOA should fail
213216
vm.prank(lp, lp);
214217
vm.expectRevert(
@@ -224,7 +227,7 @@ contract RegistrationTest is DiscoveryTestBase {
224227
Flyover.ProviderType.PegOut
225228
);
226229

227-
// Verify only 1 provider exists
230+
// Verify only 1 approved provider exists
228231
Flyover.LiquidityProvider[] memory providers = discovery.getProviders();
229232
assertEq(providers.length, 1, "Should have 1 provider");
230233
assertEq(
@@ -233,4 +236,125 @@ contract RegistrationTest is DiscoveryTestBase {
233236
"Provider address should match"
234237
);
235238
}
239+
240+
function test_Register_CreatesPendingRequestWithoutListingProvider()
241+
public
242+
{
243+
address lp = makeAddr("lpPending");
244+
vm.deal(lp, 100 ether);
245+
246+
vm.prank(lp, lp);
247+
uint256 id = discovery.register{value: MIN_COLLATERAL}(
248+
"Pending",
249+
"url",
250+
true,
251+
Flyover.ProviderType.PegIn
252+
);
253+
assertEq(id, 1, "Expected provider id 1");
254+
255+
Flyover.LiquidityProvider[] memory providers = discovery.getProviders();
256+
assertEq(providers.length, 0, "Pending provider should not be listed");
257+
assertEq(
258+
collateralManagement.getPegInCollateral(lp),
259+
0,
260+
"Collateral should not be forwarded before approval"
261+
);
262+
263+
vm.expectRevert(
264+
abi.encodeWithSelector(Flyover.ProviderNotRegistered.selector, lp)
265+
);
266+
discovery.getProvider(lp);
267+
}
268+
269+
function test_ApproveRegistration_ListsProviderAndForwardsCollateral()
270+
public
271+
{
272+
address lp = makeAddr("lpApprove");
273+
vm.deal(lp, 100 ether);
274+
275+
vm.prank(lp, lp);
276+
discovery.register{value: MIN_COLLATERAL}(
277+
"Pending",
278+
"url",
279+
true,
280+
Flyover.ProviderType.PegIn
281+
);
282+
283+
vm.prank(owner);
284+
discovery.approveRegistration(lp);
285+
286+
Flyover.LiquidityProvider[] memory providers = discovery.getProviders();
287+
assertEq(providers.length, 1, "Approved provider should be listed");
288+
assertEq(
289+
collateralManagement.getPegInCollateral(lp),
290+
MIN_COLLATERAL,
291+
"Collateral should be forwarded on approval"
292+
);
293+
}
294+
295+
function test_RejectRegistration_RefundsCollateral() public {
296+
address lp = makeAddr("lpReject");
297+
vm.deal(lp, 100 ether);
298+
uint256 startBalance = lp.balance;
299+
300+
vm.prank(lp, lp);
301+
discovery.register{value: MIN_COLLATERAL}(
302+
"Pending",
303+
"url",
304+
true,
305+
Flyover.ProviderType.PegIn
306+
);
307+
308+
vm.prank(owner);
309+
discovery.rejectRegistration(lp);
310+
311+
assertEq(lp.balance, startBalance, "Collateral should be refunded");
312+
assertEq(collateralManagement.getPegInCollateral(lp), 0);
313+
314+
Flyover.LiquidityProvider[] memory providers = discovery.getProviders();
315+
assertEq(providers.length, 0, "Rejected provider should not be listed");
316+
}
317+
318+
function test_WithdrawRegisterRequest_RefundsCollateral() public {
319+
address lp = makeAddr("lpWithdraw");
320+
vm.deal(lp, 100 ether);
321+
uint256 startBalance = lp.balance;
322+
323+
vm.prank(lp, lp);
324+
discovery.register{value: MIN_COLLATERAL}(
325+
"Pending",
326+
"url",
327+
true,
328+
Flyover.ProviderType.PegIn
329+
);
330+
331+
vm.prank(lp);
332+
discovery.withdrawRegisterRequest();
333+
334+
assertEq(lp.balance, startBalance, "Collateral should be refunded");
335+
assertEq(collateralManagement.getPegInCollateral(lp), 0);
336+
}
337+
338+
function test_ApproveRegistration_RevertsForNonAdmin() public {
339+
address lp = makeAddr("lpNoAdmin");
340+
address stranger = makeAddr("stranger");
341+
vm.deal(lp, 100 ether);
342+
343+
vm.prank(lp, lp);
344+
discovery.register{value: MIN_COLLATERAL}(
345+
"Pending",
346+
"url",
347+
true,
348+
Flyover.ProviderType.PegIn
349+
);
350+
351+
vm.prank(stranger);
352+
vm.expectRevert(
353+
abi.encodeWithSelector(
354+
IFlyoverDiscovery.NotAuthorized.selector,
355+
stranger
356+
)
357+
);
358+
discovery.approveRegistration(lp);
359+
}
236360
}

0 commit comments

Comments
 (0)