@@ -175,7 +175,11 @@ describe('getAppConfig', () => {
175175 mainEntityName : mockQfaJson . serviceBindingDetails . mainEntityName
176176 }
177177 } ;
178- const result = await getAppConfig ( mockApp , '/path/to/project' , mockQfaJsonWithoutNavEntity , mockSystem , mockFs ) ;
178+ const context = {
179+ qfaJson : mockQfaJsonWithoutNavEntity ,
180+ serviceProvider : mockServiceProvider
181+ } ;
182+ const result = await getAppConfig ( mockApp , '/path/to/project' , context , mockSystem , mockFs ) ;
179183 expect ( result ) . toEqual ( expectedAppConfig ) ;
180184 } ) ;
181185
@@ -207,13 +211,11 @@ describe('getAppConfig', () => {
207211 navigation_entity : mockQfaJson . serviceBindingDetails . navigationEntity
208212 }
209213 } ;
210- const result = await getAppConfig (
211- mockApp ,
212- '/path/to/project' ,
213- mockQfaJsonJsonWithNavEntity ,
214- mockSystem ,
215- mockFs
216- ) ;
214+ const context = {
215+ qfaJson : mockQfaJsonJsonWithNavEntity ,
216+ serviceProvider : mockSystem . connectedSystem ?. serviceProvider as AbapServiceProvider
217+ } ;
218+ const result = await getAppConfig ( mockApp , '/path/to/project' , context , mockSystem , mockFs ) ;
217219 expect ( result ) . toEqual ( expectedAppConfig ) ;
218220 } ) ;
219221
@@ -249,13 +251,11 @@ describe('getAppConfig', () => {
249251 navigation_entity : mockQfaJson . serviceBindingDetails . navigationEntity
250252 }
251253 } ;
252- const result = await getAppConfig (
253- mockApp ,
254- '/path/to/project' ,
255- mockQfaJsonJsonWithNavEntity ,
256- mockSystem ,
257- mockFs
258- ) ;
254+ const context = {
255+ qfaJson : mockQfaJsonJsonWithNavEntity ,
256+ serviceProvider : mockSystem . connectedSystem ?. serviceProvider as AbapServiceProvider
257+ } ;
258+ const result = await getAppConfig ( mockApp , '/path/to/project' , context , mockSystem , mockFs ) ;
259259 expect ( result ) . toEqual ( {
260260 ...expectedAppConfig ,
261261 ui5 : {
@@ -270,7 +270,11 @@ describe('getAppConfig', () => {
270270 } ;
271271
272272 ( readManifest as jest . Mock ) . mockReturnValue ( mockManifest ) ;
273- const result = await getAppConfig ( mockApp , '/path/to/project' , mockQfaJson , mockSystem , mockFs ) ;
273+ const context = {
274+ qfaJson : mockQfaJson ,
275+ serviceProvider : mockSystem . connectedSystem ?. serviceProvider as AbapServiceProvider
276+ } ;
277+ const result = await getAppConfig ( mockApp , '/path/to/project' , context , mockSystem , mockFs ) ;
274278 expect ( RepoAppDownloadLogger . logger . error ) . toHaveBeenCalledWith ( t ( 'error.dataSourcesNotFound' ) ) ;
275279 } ) ;
276280
@@ -293,8 +297,11 @@ describe('getAppConfig', () => {
293297 } ;
294298
295299 ( readManifest as jest . Mock ) . mockReturnValue ( mockManifest ) ;
296-
297- await getAppConfig ( mockApp , '/path/to/project' , mockQfaJson , mockSystem , mockFs ) ;
300+ const context = {
301+ qfaJson : mockQfaJson ,
302+ serviceProvider : mockSystem . connectedSystem ?. serviceProvider as AbapServiceProvider
303+ } ;
304+ await getAppConfig ( mockApp , '/path/to/project' , context , mockSystem , mockFs ) ;
298305 expect ( RepoAppDownloadLogger . logger ?. error ) . toHaveBeenCalledWith (
299306 t ( 'error.metadataFetchError' , { error : errorMsg } )
300307 ) ;
@@ -343,13 +350,21 @@ describe('getAppConfig', () => {
343350 minimum_ui5_version : null
344351 }
345352 } as unknown as QfaJsonConfig ;
346- await getAppConfig ( mockApp , '/path/to/project' , mockQfaJsonJsonWithoutUi5Version , mockSystem , mockFs ) ;
353+ const context = {
354+ qfaJson : mockQfaJsonJsonWithoutUi5Version ,
355+ serviceProvider : mockSystem . connectedSystem ?. serviceProvider as AbapServiceProvider
356+ } ;
357+ await getAppConfig ( mockApp , '/path/to/project' , context , mockSystem , mockFs ) ;
347358 expect ( RepoAppDownloadLogger . logger ?. error ) . not . toHaveBeenCalled ( ) ;
348359 } ) ;
349360} ) ;
350361
351362describe ( 'getAbapDeployConfig' , ( ) => {
352- it ( 'should generate the correct deployment configuration' , ( ) => {
363+ beforeEach ( ( ) => {
364+ jest . clearAllMocks ( ) ;
365+ } ) ;
366+
367+ it ( 'should generate the correct deployment configuration' , async ( ) => {
353368 const expectedConfig = {
354369 target : {
355370 url : 'https://test-url.com' ,
@@ -363,7 +378,99 @@ describe('getAbapDeployConfig', () => {
363378 transport : 'REPLACE_WITH_TRANSPORT'
364379 }
365380 } ;
366- const result = getAbapDeployConfig ( mockQfaJson ) ;
381+ const transportMock : { transportNumber : string } [ ] = [ ] ;
382+ const mockTransportService = {
383+ getTransportRequests : jest . fn ( ) . mockResolvedValue ( transportMock )
384+ } ;
385+ const mockServiceProvider = {
386+ getAdtService : jest . fn ( ) . mockResolvedValue ( mockTransportService )
387+ } as unknown as AbapServiceProvider ;
388+ const context = {
389+ qfaJson : mockQfaJson ,
390+ serviceProvider : mockServiceProvider
391+ } ;
392+ const result = await getAbapDeployConfig ( context ) ;
367393 expect ( result ) . toEqual ( expectedConfig ) ;
368394 } ) ;
395+
396+ it ( 'should return empty transport for local package ($TMP)' , async ( ) => {
397+ const localQfa = {
398+ ...mockQfaJson ,
399+ metadata : { ...mockQfaJson . metadata , package : '$TMP' }
400+ } as QfaJsonConfig ;
401+ const mockServiceProvider = {
402+ getAdtService : jest . fn ( )
403+ } as unknown as AbapServiceProvider ;
404+ const context = {
405+ qfaJson : localQfa ,
406+ serviceProvider : mockServiceProvider
407+ } ;
408+ const result = await getAbapDeployConfig ( context ) ;
409+ expect ( result . app . transport ) . toBe ( '' ) ;
410+ } ) ;
411+
412+ it ( 'should use transport returned by transport service when transport request is available' , async ( ) => {
413+ const transportMock = [ { transportNumber : 'LT12345' } ] ;
414+ const mockTransportService = {
415+ getTransportRequests : jest . fn ( ) . mockResolvedValue ( transportMock )
416+ } ;
417+ const mockServiceProvider = {
418+ getAdtService : jest . fn ( ) . mockResolvedValue ( mockTransportService )
419+ } as unknown as AbapServiceProvider ;
420+
421+ const context = {
422+ qfaJson : mockQfaJson ,
423+ serviceProvider : mockServiceProvider
424+ } ;
425+ const result = await getAbapDeployConfig ( context ) ;
426+ expect ( mockServiceProvider . getAdtService ) . toHaveBeenCalled ( ) ;
427+ expect ( result . app . transport ) . toBe ( 'LT12345' ) ;
428+ } ) ;
429+
430+ it ( 'should return REPLACE_WITH_TRANSPORT when transport service returns no transports' , async ( ) => {
431+ const mockTransportService = {
432+ getTransportRequests : jest . fn ( ) . mockResolvedValue ( [ ] )
433+ } ;
434+ const mockServiceProvider = {
435+ getAdtService : jest . fn ( ) . mockResolvedValue ( mockTransportService )
436+ } as unknown as AbapServiceProvider ;
437+
438+ const context = {
439+ qfaJson : mockQfaJson ,
440+ serviceProvider : mockServiceProvider
441+ } ;
442+ const result = await getAbapDeployConfig ( context ) ;
443+ expect ( result . app . transport ) . toBe ( 'REPLACE_WITH_TRANSPORT' ) ;
444+ } ) ;
445+
446+ it ( 'should generate new transport request when serviceProvider is not available in context' , async ( ) => {
447+ const context = {
448+ qfaJson : mockQfaJson
449+ } as unknown as { qfaJson : QfaJsonConfig } ;
450+
451+ const result = await getAbapDeployConfig ( context ) ;
452+ expect ( result . app . transport ) . toBe ( 'REPLACE_WITH_TRANSPORT' ) ;
453+ } ) ;
454+
455+ it ( 'should log and throw error when transport service throws unexpected error' , async ( ) => {
456+ const errorMsg = 'Some backend error' ;
457+ const mockTransportService = {
458+ getTransportRequests : jest . fn ( ) . mockRejectedValue ( new Error ( errorMsg ) )
459+ } ;
460+ const mockServiceProvider = {
461+ getAdtService : jest . fn ( ) . mockResolvedValue ( mockTransportService )
462+ } as unknown as AbapServiceProvider ;
463+
464+ const context = {
465+ qfaJson : mockQfaJson ,
466+ serviceProvider : mockServiceProvider
467+ } ;
468+
469+ await expect ( getAbapDeployConfig ( context ) ) . rejects . toThrow (
470+ t ( 'error.transportCheckFailed' , { error : errorMsg } )
471+ ) ;
472+ expect ( RepoAppDownloadLogger . logger . error ) . toHaveBeenCalledWith (
473+ t ( 'error.transportCheckFailed' , { error : errorMsg } )
474+ ) ;
475+ } ) ;
369476} ) ;
0 commit comments