@@ -312,7 +312,7 @@ describe('FileUpload Adapter', () => {
312312 ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
313313 ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './dist' ) ;
314314 ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm start' ) ;
315- ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( true ) ;
315+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'streaming' ) ;
316316
317317 const createSignedUploadUrlMock = jest
318318 . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
@@ -340,12 +340,15 @@ describe('FileUpload Adapter', () => {
340340
341341 await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
342342
343- expect ( cliux . inquire ) . toHaveBeenCalledWith ( {
344- type : 'confirm' ,
345- name : 'enableStreamingResponse' ,
346- message : 'Enable Streaming Responses' ,
347- default : false ,
348- } ) ;
343+ expect ( cliux . inquire ) . toHaveBeenCalledWith (
344+ expect . objectContaining ( {
345+ type : 'input' ,
346+ name : 'responseMode' ,
347+ message : 'Response Mode (s: streaming, b: buffered)' ,
348+ default : 'buffered' ,
349+ validate : expect . any ( Function ) ,
350+ } ) ,
351+ ) ;
349352 expect ( fileUploadInstance . config . isStreamingEnabled ) . toBe ( true ) ;
350353
351354 createSignedUploadUrlMock . mockRestore ( ) ;
@@ -386,7 +389,7 @@ describe('FileUpload Adapter', () => {
386389 await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
387390
388391 const enableStreamingCalls = ( cliux . inquire as jest . Mock ) . mock . calls . filter (
389- ( call ) => call [ 0 ] ?. name === 'enableStreamingResponse ' ,
392+ ( call ) => call [ 0 ] ?. name === 'responseMode ' ,
390393 ) ;
391394 expect ( enableStreamingCalls . length ) . toBe ( 0 ) ;
392395 expect ( fileUploadInstance . config . isStreamingEnabled ) . toBe ( true ) ;
@@ -429,7 +432,7 @@ describe('FileUpload Adapter', () => {
429432 await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
430433
431434 const enableStreamingCalls = ( cliux . inquire as jest . Mock ) . mock . calls . filter (
432- ( call ) => call [ 0 ] ?. name === 'enableStreamingResponse ' ,
435+ ( call ) => call [ 0 ] ?. name === 'responseMode ' ,
433436 ) ;
434437 expect ( enableStreamingCalls . length ) . toBe ( 0 ) ;
435438 expect ( fileUploadInstance . config . isStreamingEnabled ) . toBe ( false ) ;
@@ -444,7 +447,7 @@ describe('FileUpload Adapter', () => {
444447 ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
445448 ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
446449 ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
447- ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( true ) ;
450+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'streaming' ) ;
448451
449452 const createSignedUploadUrlMock = jest
450453 . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
@@ -479,12 +482,15 @@ describe('FileUpload Adapter', () => {
479482 ( call ) => call [ 0 ] ?. name === 'serverCommand' ,
480483 ) ;
481484 expect ( serverCommandCalls . length ) . toBe ( 0 ) ;
482- expect ( cliux . inquire ) . toHaveBeenCalledWith ( {
483- type : 'confirm' ,
484- name : 'enableStreamingResponse' ,
485- message : 'Enable Streaming Responses' ,
486- default : false ,
487- } ) ;
485+ expect ( cliux . inquire ) . toHaveBeenCalledWith (
486+ expect . objectContaining ( {
487+ type : 'input' ,
488+ name : 'responseMode' ,
489+ message : 'Response Mode (s: streaming, b: buffered)' ,
490+ default : 'buffered' ,
491+ validate : expect . any ( Function ) ,
492+ } ) ,
493+ ) ;
488494 expect ( fileUploadInstance . config . isStreamingEnabled ) . toBe ( true ) ;
489495
490496 createSignedUploadUrlMock . mockRestore ( ) ;
@@ -529,7 +535,7 @@ describe('FileUpload Adapter', () => {
529535 await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
530536
531537 const enableStreamingCalls = ( cliux . inquire as jest . Mock ) . mock . calls . filter (
532- ( call ) => call [ 0 ] ?. name === 'enableStreamingResponse ' ,
538+ ( call ) => call [ 0 ] ?. name === 'responseMode ' ,
533539 ) ;
534540 expect ( enableStreamingCalls . length ) . toBe ( 0 ) ;
535541 expect ( fileUploadInstance . config . isStreamingEnabled ) . toBe ( false ) ;
@@ -539,6 +545,114 @@ describe('FileUpload Adapter', () => {
539545 uploadFileMock . mockRestore ( ) ;
540546 handleEnvImportFlowMock . mockRestore ( ) ;
541547 } ) ;
548+
549+ it . each ( [
550+ [ 's' , true ] ,
551+ [ 'streaming' , true ] ,
552+ [ 'STREAMING' , true ] ,
553+ [ ' Streaming ' , true ] ,
554+ [ 'b' , false ] ,
555+ [ 'buffered' , false ] ,
556+ [ 'BUFFERED' , false ] ,
557+ [ ' Buffered ' , false ] ,
558+ ] ) ( 'should map Response Mode input "%s" to isStreamingEnabled %s' , async ( input , expected ) => {
559+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'test-project' ) ;
560+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
561+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
562+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
563+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( input ) ;
564+
565+ const createSignedUploadUrlMock = jest
566+ . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
567+ . mockResolvedValue ( { uploadUid : 'test-upload-uid' } ) ;
568+ const archiveMock = jest
569+ . spyOn ( FileUpload . prototype as any , 'archive' )
570+ . mockResolvedValue ( { zipName : 'test.zip' , zipPath : '/path/to/test.zip' , projectName : 'test-project' } ) ;
571+ const uploadFileMock = jest
572+ . spyOn ( FileUpload . prototype as any , 'uploadFile' )
573+ . mockResolvedValue ( undefined ) ;
574+
575+ const fileUploadInstance = new FileUpload ( {
576+ config : {
577+ flags : {
578+ 'response-mode' : undefined ,
579+ } ,
580+ framework : 'GATSBY' ,
581+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
582+ outputDirectories : { GATSBY : './public' } ,
583+ } ,
584+ log : logMock ,
585+ exit : exitMock ,
586+ } as any ) ;
587+
588+ const handleEnvImportFlowMock = jest
589+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
590+ . mockResolvedValue ( undefined ) ;
591+
592+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
593+
594+ expect ( fileUploadInstance . config . isStreamingEnabled ) . toBe ( expected ) ;
595+
596+ createSignedUploadUrlMock . mockRestore ( ) ;
597+ archiveMock . mockRestore ( ) ;
598+ uploadFileMock . mockRestore ( ) ;
599+ handleEnvImportFlowMock . mockRestore ( ) ;
600+ } ) ;
601+
602+ it ( 'Response Mode validate should accept s/b/streaming/buffered and reject anything else' , async ( ) => {
603+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'test-project' ) ;
604+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
605+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
606+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
607+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'streaming' ) ;
608+
609+ const createSignedUploadUrlMock = jest
610+ . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
611+ . mockResolvedValue ( { uploadUid : 'test-upload-uid' } ) ;
612+ const archiveMock = jest
613+ . spyOn ( FileUpload . prototype as any , 'archive' )
614+ . mockResolvedValue ( { zipName : 'test.zip' , zipPath : '/path/to/test.zip' , projectName : 'test-project' } ) ;
615+ const uploadFileMock = jest
616+ . spyOn ( FileUpload . prototype as any , 'uploadFile' )
617+ . mockResolvedValue ( undefined ) ;
618+
619+ const fileUploadInstance = new FileUpload ( {
620+ config : {
621+ flags : {
622+ 'response-mode' : undefined ,
623+ } ,
624+ framework : 'GATSBY' ,
625+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
626+ outputDirectories : { GATSBY : './public' } ,
627+ } ,
628+ log : logMock ,
629+ exit : exitMock ,
630+ } as any ) ;
631+
632+ const handleEnvImportFlowMock = jest
633+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
634+ . mockResolvedValue ( undefined ) ;
635+
636+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
637+
638+ const responseModeCall = ( cliux . inquire as jest . Mock ) . mock . calls . find (
639+ ( call ) => call [ 0 ] ?. name === 'responseMode' ,
640+ ) ;
641+ const { validate } = responseModeCall [ 0 ] ;
642+
643+ expect ( validate ( 's' ) ) . toBe ( true ) ;
644+ expect ( validate ( 'streaming' ) ) . toBe ( true ) ;
645+ expect ( validate ( 'b' ) ) . toBe ( true ) ;
646+ expect ( validate ( 'buffered' ) ) . toBe ( true ) ;
647+ expect ( validate ( ' STREAMING ' ) ) . toBe ( true ) ;
648+ expect ( validate ( '' ) ) . toBe ( 'Please enter "s"/"streaming" or "b"/"buffered".' ) ;
649+ expect ( validate ( 'yes' ) ) . toBe ( 'Please enter "s"/"streaming" or "b"/"buffered".' ) ;
650+
651+ createSignedUploadUrlMock . mockRestore ( ) ;
652+ archiveMock . mockRestore ( ) ;
653+ uploadFileMock . mockRestore ( ) ;
654+ handleEnvImportFlowMock . mockRestore ( ) ;
655+ } ) ;
542656 } ) ;
543657} ) ;
544658
0 commit comments