@@ -354,6 +354,56 @@ describe('Kafka.send', () => {
354
354
355
355
expect ( logger . crit ) . toHaveBeenCalledWith ( expect . stringContaining ( 'Kafka Send Error' ) )
356
356
} )
357
+
358
+ it ( 'extracts nested Kafka cause for connect errors' , async ( ) => {
359
+ const producer = new ( Kafka as unknown as jest . Mock ) ( { } as KafkaConfig ) . producer ( )
360
+ ; ( producer . connect as unknown as jest . Mock ) . mockReset ( )
361
+
362
+ // Simulate a KafkaJSError with a nested cause coming from Kafka
363
+ const kafkaErr = new Error ( 'outer wrapper error' ) as any
364
+ kafkaErr . name = 'KafkaJSError'
365
+ kafkaErr . cause = new Error ( 'brokers down' )
366
+ kafkaErr . cause . name = 'BrokerNotAvailable'
367
+ ; ( producer . connect as unknown as jest . Mock ) . mockRejectedValueOnce ( kafkaErr )
368
+
369
+ const logger = { crit : jest . fn ( ) } as any
370
+
371
+ try {
372
+ await testDestination . testAction ( 'send' , { ...( testData as any ) , logger } )
373
+ } catch ( error ) {
374
+ expect ( error ) . toBeInstanceOf ( IntegrationError )
375
+ expect ( ( error as IntegrationError ) . message ) . toBe ( 'Kafka Connection Error - BrokerNotAvailable: brokers down' )
376
+ expect ( ( error as IntegrationError ) . status ) . toBe ( 500 )
377
+ }
378
+
379
+ expect ( logger . crit ) . toHaveBeenCalledWith ( expect . stringContaining ( 'BrokerNotAvailable' ) )
380
+ } )
381
+
382
+ it ( 'extracts nested Kafka cause for send errors' , async ( ) => {
383
+ const producer = new ( Kafka as unknown as jest . Mock ) ( { } as KafkaConfig ) . producer ( )
384
+ ; ( producer . connect as unknown as jest . Mock ) . mockReset ( )
385
+ ; ( producer . connect as unknown as jest . Mock ) . mockResolvedValueOnce ( undefined )
386
+
387
+ // Simulate a KafkaJSError with a nested cause on send
388
+ const kafkaErr = new Error ( 'outer wrapper error' ) as any
389
+ kafkaErr . name = 'KafkaJSError'
390
+ kafkaErr . cause = new Error ( 'message too large' )
391
+ kafkaErr . cause . name = 'MessageSizeTooLarge'
392
+ ; ( producer . send as unknown as jest . Mock ) . mockReset ( )
393
+ ; ( producer . send as unknown as jest . Mock ) . mockRejectedValueOnce ( kafkaErr )
394
+
395
+ const logger = { crit : jest . fn ( ) } as any
396
+
397
+ try {
398
+ await testDestination . testAction ( 'send' , { ...( testData as any ) , logger } )
399
+ } catch ( error ) {
400
+ expect ( error ) . toBeInstanceOf ( IntegrationError )
401
+ expect ( ( error as IntegrationError ) . message ) . toBe ( 'Kafka Producer Error - MessageSizeTooLarge: message too large' )
402
+ expect ( ( error as IntegrationError ) . status ) . toBe ( 500 )
403
+ }
404
+
405
+ expect ( logger . crit ) . toHaveBeenCalledWith ( expect . stringContaining ( 'MessageSizeTooLarge' ) )
406
+ } )
357
407
} )
358
408
359
409
describe ( 'getOrCreateProducer' , ( ) => {
0 commit comments