@@ -54,35 +54,47 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
5454 responseData : MockRequestResponseData < DataT > ,
5555 subscriptionCallback ?: RequestCallback
5656 ) => {
57- emitter . addListener (
58- toEmitId ( path , method ) ,
59- ( request : OutgoingRequest , s : WebSocket ) => {
60- if ( subscriptionCallback ) {
61- subscriptionCallback ( request ) ;
62- }
63-
64- const data = typeof responseData === 'function' ? responseData ( request , s ) : responseData ;
65- if ( ! data || ! data . code ) {
66- throw new Error ( `Mock server: response handler for path ${ path } must return a status code` ) ;
67- }
68-
69- const response : RequestSuccessResponse | RequestErrorResponse = {
70- callback_id : request . callback_id ,
71- ...data ,
72- } ;
73-
74- s . send ( JSON . stringify ( response ) ) ;
57+ const requestHandler = ( request : OutgoingRequest , s : WebSocket ) => {
58+ if ( subscriptionCallback ) {
59+ subscriptionCallback ( request ) ;
60+ }
61+
62+ const data = typeof responseData === 'function' ? responseData ( request , s ) : responseData ;
63+ if ( ! data || ! data . code ) {
64+ throw new Error ( `Mock server: response handler for path ${ path } must return a status code` ) ;
7565 }
66+
67+ const response : RequestSuccessResponse | RequestErrorResponse = {
68+ callback_id : request . callback_id ,
69+ ...data ,
70+ } ;
71+
72+ s . send ( JSON . stringify ( response ) ) ;
73+ } ;
74+
75+ const emitId = toEmitId ( path , method ) ;
76+ emitter . addListener (
77+ emitId ,
78+ requestHandler ,
7679 ) ;
80+ emitter . setMaxListeners ( 1 ) ;
81+
82+ return ( ) => emitter . removeListener ( emitId , requestHandler ) ;
7783 } ;
7884
7985 const addDummyDataHandler = ( method : string , path : string ) => {
86+ const handler = ( request : OutgoingRequest , s : WebSocket ) => {
87+ // Do nothing
88+ } ;
89+
90+ const emitId = toEmitId ( path , method ) ;
8091 emitter . addListener (
81- toEmitId ( path , method ) ,
82- ( request : OutgoingRequest , s : WebSocket ) => {
83- // Do nothing
84- }
92+ emitId ,
93+ handler
8594 ) ;
95+ emitter . setMaxListeners ( 1 ) ;
96+
97+ return ( ) => emitter . removeListener ( emitId , handler ) ;
8698 }
8799
88100 const addRequestHandler = < DataT extends object | undefined > (
@@ -96,7 +108,7 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
96108 code : data ? 200 : 204 ,
97109 }
98110
99- addServerHandler < DataT > (
111+ return addServerHandler < DataT > (
100112 method ,
101113 path ,
102114 handlerData ,
@@ -111,7 +123,7 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
111123 errorCode : number ,
112124 subscriptionCallback ?: RequestCallback
113125 ) => {
114- addServerHandler (
126+ return addServerHandler (
115127 method ,
116128 path ,
117129 {
@@ -135,8 +147,8 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
135147
136148 const path = entityId ? `${ moduleName } /${ entityId } /${ type } /${ listenerName } ` : `${ moduleName } /${ type } /${ listenerName } ` ;
137149
138- addRequestHandler ( 'POST' , path , undefined , subscribeFn ) ;
139- addRequestHandler ( 'DELETE' , path , undefined , unsubscribeFn ) ;
150+ const subscribeRemove = addRequestHandler ( 'POST' , path , undefined , subscribeFn ) ;
151+ const unsubscribeRemove = addRequestHandler ( 'DELETE' , path , undefined , unsubscribeFn ) ;
140152
141153 const fire = ( data : object , entityId ?: string | number ) => {
142154 send ( {
@@ -146,8 +158,14 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
146158 } ) ;
147159 }
148160
161+ const remove = ( ) => {
162+ subscribeRemove ( ) ;
163+ unsubscribeRemove ( ) ;
164+ } ;
165+
149166 return {
150167 fire,
168+ remove,
151169
152170 subscribeFn,
153171 unsubscribeFn,
@@ -175,20 +193,25 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
175193 const resolveFn = mockF . fn ( ) ;
176194 const rejectFn = mockF . fn ( ) ;
177195
178- addRequestHandler (
196+ const resolveRemove = addRequestHandler (
179197 'POST' ,
180198 `${ subscriber . path } /${ completionId } /resolve` ,
181199 undefined ,
182200 resolveFn
183201 ) ;
184202
185- addRequestHandler (
203+ const rejectRemove = addRequestHandler (
186204 'POST' ,
187205 `${ subscriber . path } /${ completionId } /reject` ,
188206 undefined ,
189207 rejectFn
190208 ) ;
191209
210+ const remove = ( ) => {
211+ resolveRemove ( ) ;
212+ rejectRemove ( ) ;
213+ }
214+
192215 const fire = ( data : object ) => {
193216 send ( {
194217 event : listenerName ,
@@ -197,7 +220,7 @@ const getMockServer = (initialOptions: Partial<MockServerOptions> = {}) => {
197220 } ) ;
198221 }
199222
200- return { fire, resolveFn, rejectFn } ;
223+ return { fire, remove , resolveFn, rejectFn } ;
201224 } ;
202225
203226 return {
0 commit comments