@@ -221,4 +221,94 @@ describe('Test hdbChildIpcHandler module', () => {
221221 sendToThreadStub . restore ( ) ;
222222 } ) ;
223223 } ) ;
224+
225+ describe ( 'Test resourceOpenApiRequestHandler function' , ( ) => {
226+ let resource_openapi_handler ;
227+
228+ before ( ( ) => {
229+ resource_openapi_handler = server_itc_handlers . __get__ ( 'resourceOpenApiRequestHandler' ) ;
230+ } ) ;
231+
232+ // Tests validation: invalid events should be rejected and logged
233+ it ( 'logs error on invalid event (missing type)' , async ( ) => {
234+ const test_event = {
235+ message : { originator : 1 , requestId : 42 , serverHttpURL : 'http://localhost' } ,
236+ } ;
237+ await resource_openapi_handler ( test_event ) ;
238+ expect ( log_error_stub ) . to . have . been . called ;
239+ } ) ;
240+
241+ // Tests validation: invalid events should be rejected and logged
242+ it ( 'logs error on invalid event (missing message)' , async ( ) => {
243+ const test_event = {
244+ type : 'resource_openapi_request' ,
245+ } ;
246+ await resource_openapi_handler ( test_event ) ;
247+ expect ( log_error_stub ) . to . have . been . called ;
248+ } ) ;
249+
250+ // Tests validation: invalid events should be rejected and logged
251+ it ( 'logs error on invalid event (missing originator)' , async ( ) => {
252+ const test_event = {
253+ type : 'resource_openapi_request' ,
254+ message : { requestId : 42 , serverHttpURL : 'http://localhost' } ,
255+ } ;
256+ await resource_openapi_handler ( test_event ) ;
257+ expect ( log_error_stub ) . to . have . been . called ;
258+ } ) ;
259+
260+ it ( 'sends OpenAPI response directly when originator is reachable' , async ( ) => {
261+ sandbox . resetHistory ( ) ;
262+ const sendToThreadStub = sandbox . stub ( global . threads , 'sendToThread' ) . returns ( true ) ;
263+ // Inject a minimal mock for generateJsonApi and a non-empty resources Map
264+ const mockOpenapi = { openapi : '3.0.3' , paths : { } } ;
265+ const mockResources = new Map ( [ [ 'test' , { path : 'test' , Resource : { isError : false } } ] ] ) ;
266+ server_itc_handlers . __set__ ( 'require' , ( path ) => {
267+ if ( path . includes ( 'Resources' ) ) return { resources : mockResources } ;
268+ if ( path . includes ( 'openApi' ) ) return { generateJsonApi : ( ) => mockOpenapi } ;
269+ return require ( path ) ;
270+ } ) ;
271+
272+ const test_event = {
273+ type : 'resource_openapi_request' ,
274+ message : { originator : 5 , requestId : 99 , serverHttpURL : 'http://localhost:9925' } ,
275+ } ;
276+ await resource_openapi_handler ( test_event ) ;
277+
278+ expect ( sendToThreadStub ) . to . have . been . calledOnce ;
279+ expect ( sendToThreadStub . firstCall . args [ 0 ] ) . to . equal ( 5 ) ;
280+ const responseMessage = sendToThreadStub . firstCall . args [ 1 ] ;
281+ expect ( responseMessage . type ) . to . equal ( 'resource_openapi_response' ) ;
282+ expect ( responseMessage . message . requestId ) . to . equal ( 99 ) ;
283+ expect ( responseMessage . message . openapi ) . to . deep . equal ( mockOpenapi ) ;
284+ expect ( log_error_stub ) . to . not . have . been . called ;
285+ sendToThreadStub . restore ( ) ;
286+ // Restore original require
287+ server_itc_handlers . __set__ ( 'require' , require ) ;
288+ } ) ;
289+
290+ it ( 'drops response silently when originator is unreachable' , async ( ) => {
291+ sandbox . resetHistory ( ) ;
292+ const sendToThreadStub = sandbox . stub ( global . threads , 'sendToThread' ) . returns ( false ) ;
293+ const mockResources = new Map ( [ [ 'test' , { path : 'test' , Resource : { isError : false } } ] ] ) ;
294+ server_itc_handlers . __set__ ( 'require' , ( path ) => {
295+ if ( path . includes ( 'Resources' ) ) return { resources : mockResources } ;
296+ if ( path . includes ( 'openApi' ) ) return { generateJsonApi : ( ) => ( { } ) } ;
297+ return require ( path ) ;
298+ } ) ;
299+
300+ const test_event = {
301+ type : 'resource_openapi_request' ,
302+ message : { originator : 99 , requestId : 7 , serverHttpURL : 'http://localhost:9925' } ,
303+ } ;
304+ await resource_openapi_handler ( test_event ) ;
305+
306+ expect ( sendToThreadStub ) . to . have . been . calledOnce ;
307+ expect ( log_error_stub ) . to . not . have . been . called ;
308+ const traceCalls = log_trace_stub . getCalls ( ) . map ( ( call ) => String ( call . args [ 0 ] ) ) ;
309+ expect ( traceCalls . some ( ( msg ) => msg . includes ( 'Dropping resource OpenAPI response' ) ) ) . to . be . true ;
310+ sendToThreadStub . restore ( ) ;
311+ server_itc_handlers . __set__ ( 'require' , require ) ;
312+ } ) ;
313+ } ) ;
224314} ) ;
0 commit comments