@@ -2681,6 +2681,55 @@ describe('SnapController', () => {
26812681 } ,
26822682 ) ;
26832683
2684+ it ( 'ensures onboarding has completed before processing requests' , async ( ) => {
2685+ const rootMessenger = getControllerMessenger ( ) ;
2686+ const messenger = getSnapControllerMessenger ( rootMessenger ) ;
2687+
2688+ const callActionSpy = jest . spyOn ( messenger , 'call' ) ;
2689+
2690+ const { promise, resolve } = createDeferredPromise ( ) ;
2691+ const ensureOnboardingComplete = jest . fn ( ) . mockReturnValue ( promise ) ;
2692+ const snapController = getSnapController (
2693+ getSnapControllerOptions ( {
2694+ messenger,
2695+ state : {
2696+ snaps : getPersistedSnapsState ( ) ,
2697+ } ,
2698+ ensureOnboardingComplete,
2699+ } ) ,
2700+ ) ;
2701+
2702+ const snap = snapController . getExpect ( MOCK_SNAP_ID ) ;
2703+
2704+ const requestPromise = snapController . handleRequest ( {
2705+ snapId : snap . id ,
2706+ origin : METAMASK_ORIGIN ,
2707+ handler : HandlerType . OnRpcRequest ,
2708+ request : {
2709+ jsonrpc : '2.0' ,
2710+ method : 'test' ,
2711+ params : { } ,
2712+ } ,
2713+ } ) ;
2714+
2715+ await sleep ( 100 ) ;
2716+
2717+ expect ( callActionSpy ) . not . toHaveBeenCalledWith (
2718+ 'ExecutionService:executeSnap' ,
2719+ expect . objectContaining ( { snapId : MOCK_SNAP_ID } ) ,
2720+ ) ;
2721+
2722+ resolve ( ) ;
2723+ expect ( await requestPromise ) . toBeUndefined ( ) ;
2724+
2725+ expect ( callActionSpy ) . toHaveBeenCalledWith (
2726+ 'ExecutionService:executeSnap' ,
2727+ expect . objectContaining ( { snapId : MOCK_SNAP_ID } ) ,
2728+ ) ;
2729+
2730+ snapController . destroy ( ) ;
2731+ } ) ;
2732+
26842733 it ( 'throws if the snap does not have permission to handle JSON-RPC requests from dapps' , async ( ) => {
26852734 const rootMessenger = getControllerMessenger ( ) ;
26862735 const messenger = getSnapControllerMessenger ( rootMessenger ) ;
0 commit comments