@@ -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