@@ -18,6 +18,32 @@ const mockedAxios = axios as jest.Mocked<typeof axios>;
18
18
jest . mock ( 'axios' ) ;
19
19
mockedAxios . create = jest . fn ( ( ) => mockedAxios ) ;
20
20
21
+ const createMockPostImplementation = (
22
+ targetsResponses : ( any | Error ) [ ] ,
23
+ sourcesResponses : ( any | Error ) [ ] ,
24
+ ) => {
25
+ let targetsCallCount = 0 ;
26
+ let sourcesCallCount = 0 ;
27
+
28
+ return ( url : string ) => {
29
+ if ( url === RdiUrl . TestTargetsConnections ) {
30
+ // eslint-disable-next-line no-plusplus
31
+ const response = targetsResponses [ targetsCallCount ++ ] ;
32
+ return response instanceof Error
33
+ ? Promise . reject ( response )
34
+ : Promise . resolve ( response ) ;
35
+ }
36
+ if ( url === RdiUrl . TestSourcesConnections ) {
37
+ // eslint-disable-next-line no-plusplus
38
+ const response = sourcesResponses [ sourcesCallCount ++ ] ;
39
+ return response instanceof Error
40
+ ? Promise . reject ( response )
41
+ : Promise . resolve ( response ) ;
42
+ }
43
+ return Promise . reject ( new Error ( `Unexpected URL: ${ url } ` ) ) ;
44
+ } ;
45
+ } ;
46
+
21
47
describe ( 'ApiRdiClient' , ( ) => {
22
48
let client : ApiRdiClient ;
23
49
@@ -274,7 +300,7 @@ describe('ApiRdiClient', () => {
274
300
} ) ;
275
301
276
302
describe ( 'testConnections' , ( ) => {
277
- const config = { sources : { } } ;
303
+ const config = { sources : { source1 : { } } } ;
278
304
279
305
it ( 'should return a successful response' , async ( ) => {
280
306
const expectedTargetsResponse = {
@@ -285,24 +311,72 @@ describe('ApiRdiClient', () => {
285
311
} ,
286
312
} ;
287
313
const expectedSourcesResponse = {
288
- connected : true ,
289
- error : '' ,
314
+ source1 : {
315
+ connected : true ,
316
+ error : '' ,
317
+ } ,
290
318
} ;
291
319
292
- mockedAxios . post
293
- . mockResolvedValueOnce ( { data : expectedTargetsResponse } )
294
- . mockResolvedValueOnce ( { data : expectedSourcesResponse } ) ;
320
+ const targetsResponses = [ { data : expectedTargetsResponse } ] ;
295
321
296
- const response = await client . testConnections ( config ) ;
322
+ const sourcesResponses = [
323
+ { data : expectedSourcesResponse . source1 } ,
324
+ ] ;
297
325
298
- expect ( mockedAxios . post ) . toHaveBeenCalledWith (
299
- RdiUrl . TestTargetsConnections ,
300
- config ,
326
+ mockedAxios . post . mockImplementation (
327
+ createMockPostImplementation ( targetsResponses , sourcesResponses ) ,
301
328
) ;
302
- expect ( mockedAxios . post ) . toHaveBeenCalledWith (
303
- RdiUrl . TestSourcesConnections ,
304
- { } ,
329
+
330
+ const response = await client . testConnections ( config ) ;
331
+
332
+ expect ( mockedAxios . post ) . toHaveBeenCalledTimes ( 2 ) ;
333
+
334
+ expect ( response ) . toEqual ( {
335
+ sources : expectedSourcesResponse ,
336
+ ...expectedTargetsResponse ,
337
+ } ) ;
338
+ } ) ;
339
+
340
+ it ( 'should return a successful response with multiple sources' , async ( ) => {
341
+ const expectedTargetsResponse = {
342
+ targets : {
343
+ target : {
344
+ status : 'success' ,
345
+ } ,
346
+ } ,
347
+ } ;
348
+
349
+ const expectedSourcesResponse = {
350
+ source1 : {
351
+ connected : true ,
352
+ error : '' ,
353
+ } ,
354
+ source2 : {
355
+ connected : false ,
356
+ error : 'Connection failed' ,
357
+ } ,
358
+ } ;
359
+
360
+ const targetsResponses = [ { data : expectedTargetsResponse } ] ;
361
+
362
+ const sourcesResponses = [
363
+ { data : { connected : true , error : '' } } ,
364
+ { data : { connected : false , error : 'Connection failed' } } ,
365
+ ] ;
366
+
367
+ mockedAxios . post . mockImplementation (
368
+ createMockPostImplementation ( targetsResponses , sourcesResponses ) ,
305
369
) ;
370
+
371
+ const response = await client . testConnections ( {
372
+ sources : {
373
+ source1 : { } ,
374
+ source2 : { } ,
375
+ } ,
376
+ } ) ;
377
+
378
+ expect ( mockedAxios . post ) . toHaveBeenCalledTimes ( 3 ) ;
379
+
306
380
expect ( response ) . toEqual ( {
307
381
sources : expectedSourcesResponse ,
308
382
...expectedTargetsResponse ,
@@ -323,22 +397,66 @@ describe('ApiRdiClient', () => {
323
397
324
398
const loggerErrorSpy = jest . spyOn ( client [ 'logger' ] , 'error' ) . mockImplementation ( ) ;
325
399
326
- mockedAxios . post
327
- . mockResolvedValueOnce ( { data : expectedTargetsResponse } )
328
- . mockRejectedValueOnce ( new Error ( 'Sources request failed' ) ) ;
400
+ const targetsResponses = [ { data : expectedTargetsResponse } ] ;
401
+
402
+ const sourcesResponses = [
403
+ new Error ( 'Sources request failed' ) ,
404
+ ] ;
405
+
406
+ mockedAxios . post . mockImplementation (
407
+ createMockPostImplementation ( targetsResponses , sourcesResponses ) ,
408
+ ) ;
329
409
330
410
const response = await client . testConnections ( config ) ;
331
411
332
412
expect ( response ) . toEqual ( {
333
413
targets : expectedTargetsResponse . targets ,
334
- sources : { connected : false , error : 'Failed to fetch sources' } ,
414
+ sources : { } ,
335
415
} ) ;
336
416
337
417
expect ( mockedAxios . post ) . toHaveBeenCalledTimes ( 2 ) ;
338
418
339
419
expect ( loggerErrorSpy ) . toHaveBeenCalledWith ( 'Failed to fetch sources' , expect . any ( Error ) ) ;
340
420
loggerErrorSpy . mockRestore ( ) ;
341
421
} ) ;
422
+
423
+ it ( 'should return targets data even if TestSourcesConnections fails, asd' , async ( ) => {
424
+ const expectedTargetsResponse = {
425
+ targets : { target1 : { status : 'success' } } ,
426
+ } ;
427
+
428
+ const loggerErrorSpy = jest . spyOn ( client [ 'logger' ] , 'error' ) . mockImplementation ( ) ;
429
+
430
+ const targetsResponses = [ { data : expectedTargetsResponse } ] ;
431
+
432
+ const sourcesResponses = [
433
+ { data : { connected : true , error : '' } } ,
434
+ new Error ( 'Sources request failed' ) ,
435
+ ] ;
436
+
437
+ mockedAxios . post . mockImplementation (
438
+ createMockPostImplementation ( targetsResponses , sourcesResponses ) ,
439
+ ) ;
440
+
441
+ const response = await client . testConnections ( {
442
+ sources : {
443
+ source1 : { } ,
444
+ source2 : { } ,
445
+ } ,
446
+ } ) ;
447
+
448
+ expect ( response ) . toEqual ( {
449
+ targets : expectedTargetsResponse . targets ,
450
+ sources : {
451
+ source1 : { connected : true , error : '' } ,
452
+ } ,
453
+ } ) ;
454
+
455
+ expect ( mockedAxios . post ) . toHaveBeenCalledTimes ( 3 ) ;
456
+
457
+ expect ( loggerErrorSpy ) . toHaveBeenCalledWith ( 'Failed to fetch sources' , expect . any ( Error ) ) ;
458
+ loggerErrorSpy . mockRestore ( ) ;
459
+ } ) ;
342
460
} ) ;
343
461
344
462
describe ( 'getPipelineStatus' , ( ) => {
0 commit comments