@@ -648,6 +648,160 @@ describe('FileUpload Adapter', () => {
648648 uploadFileMock . mockRestore ( ) ;
649649 handleEnvImportFlowMock . mockRestore ( ) ;
650650 } ) ;
651+
652+ it . each ( [
653+ [ 'a "yes" answer maps to enabled' , true , true ] ,
654+ [ 'a "no" answer maps to disabled' , false , false ] ,
655+ ] ) (
656+ 'should prompt Enable Contentstack Authentication (default enabled) when disable-cs-auth is not provided — %s' ,
657+ async ( _label , answer , expected ) => {
658+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'test-project' ) ;
659+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
660+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
661+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
662+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( answer ) ;
663+
664+ const createSignedUploadUrlMock = jest
665+ . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
666+ . mockResolvedValue ( { uploadUid : 'test-upload-uid' } ) ;
667+ const archiveMock = jest
668+ . spyOn ( FileUpload . prototype as any , 'archive' )
669+ . mockResolvedValue ( { zipName : 'test.zip' , zipPath : '/path/to/test.zip' , projectName : 'test-project' } ) ;
670+ const uploadFileMock = jest
671+ . spyOn ( FileUpload . prototype as any , 'uploadFile' )
672+ . mockResolvedValue ( undefined ) ;
673+
674+ const fileUploadInstance = new FileUpload ( {
675+ config : {
676+ flags : {
677+ 'response-mode' : 'buffered' ,
678+ } ,
679+ framework : 'GATSBY' ,
680+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
681+ outputDirectories : { GATSBY : './public' } ,
682+ } ,
683+ log : logMock ,
684+ exit : exitMock ,
685+ } as any ) ;
686+
687+ const handleEnvImportFlowMock = jest
688+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
689+ . mockResolvedValue ( undefined ) ;
690+
691+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
692+
693+ expect ( cliux . inquire ) . toHaveBeenCalledWith (
694+ expect . objectContaining ( {
695+ type : 'confirm' ,
696+ name : 'contentstackAuth' ,
697+ default : true ,
698+ } ) ,
699+ ) ;
700+ expect ( fileUploadInstance . config . isContentstackAuthenticationEnabled ) . toBe ( expected ) ;
701+
702+ createSignedUploadUrlMock . mockRestore ( ) ;
703+ archiveMock . mockRestore ( ) ;
704+ uploadFileMock . mockRestore ( ) ;
705+ handleEnvImportFlowMock . mockRestore ( ) ;
706+ } ,
707+ ) ;
708+
709+
710+ it ( 'should disable Contentstack Authentication without prompt when --disable-cs-auth is passed' , async ( ) => {
711+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'test-project' ) ;
712+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
713+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
714+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
715+
716+ const createSignedUploadUrlMock = jest
717+ . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
718+ . mockResolvedValue ( { uploadUid : 'test-upload-uid' } ) ;
719+ const archiveMock = jest
720+ . spyOn ( FileUpload . prototype as any , 'archive' )
721+ . mockResolvedValue ( { zipName : 'test.zip' , zipPath : '/path/to/test.zip' , projectName : 'test-project' } ) ;
722+ const uploadFileMock = jest
723+ . spyOn ( FileUpload . prototype as any , 'uploadFile' )
724+ . mockResolvedValue ( undefined ) ;
725+
726+ const fileUploadInstance = new FileUpload ( {
727+ config : {
728+ flags : {
729+ 'response-mode' : 'buffered' ,
730+ 'disable-cs-auth' : true ,
731+ } ,
732+ framework : 'GATSBY' ,
733+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
734+ outputDirectories : { GATSBY : './public' } ,
735+ } ,
736+ log : logMock ,
737+ exit : exitMock ,
738+ } as any ) ;
739+
740+ const handleEnvImportFlowMock = jest
741+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
742+ . mockResolvedValue ( undefined ) ;
743+
744+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
745+
746+ const contentstackAuthCalls = ( cliux . inquire as jest . Mock ) . mock . calls . filter (
747+ ( call ) => call [ 0 ] ?. name === 'contentstackAuth' ,
748+ ) ;
749+ expect ( contentstackAuthCalls . length ) . toBe ( 0 ) ;
750+ expect ( fileUploadInstance . config . isContentstackAuthenticationEnabled ) . toBe ( false ) ;
751+
752+ createSignedUploadUrlMock . mockRestore ( ) ;
753+ archiveMock . mockRestore ( ) ;
754+ uploadFileMock . mockRestore ( ) ;
755+ handleEnvImportFlowMock . mockRestore ( ) ;
756+ } ) ;
757+
758+ it ( 'should enable Contentstack Authentication without prompt when --enable-cs-auth is passed' , async ( ) => {
759+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'test-project' ) ;
760+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
761+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
762+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
763+
764+ const createSignedUploadUrlMock = jest
765+ . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
766+ . mockResolvedValue ( { uploadUid : 'test-upload-uid' } ) ;
767+ const archiveMock = jest
768+ . spyOn ( FileUpload . prototype as any , 'archive' )
769+ . mockResolvedValue ( { zipName : 'test.zip' , zipPath : '/path/to/test.zip' , projectName : 'test-project' } ) ;
770+ const uploadFileMock = jest
771+ . spyOn ( FileUpload . prototype as any , 'uploadFile' )
772+ . mockResolvedValue ( undefined ) ;
773+
774+ const fileUploadInstance = new FileUpload ( {
775+ config : {
776+ flags : {
777+ 'response-mode' : 'buffered' ,
778+ 'enable-cs-auth' : true ,
779+ } ,
780+ framework : 'GATSBY' ,
781+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
782+ outputDirectories : { GATSBY : './public' } ,
783+ } ,
784+ log : logMock ,
785+ exit : exitMock ,
786+ } as any ) ;
787+
788+ const handleEnvImportFlowMock = jest
789+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
790+ . mockResolvedValue ( undefined ) ;
791+
792+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
793+
794+ const contentstackAuthCalls = ( cliux . inquire as jest . Mock ) . mock . calls . filter (
795+ ( call ) => call [ 0 ] ?. name === 'contentstackAuth' ,
796+ ) ;
797+ expect ( contentstackAuthCalls . length ) . toBe ( 0 ) ;
798+ expect ( fileUploadInstance . config . isContentstackAuthenticationEnabled ) . toBe ( true ) ;
799+
800+ createSignedUploadUrlMock . mockRestore ( ) ;
801+ archiveMock . mockRestore ( ) ;
802+ uploadFileMock . mockRestore ( ) ;
803+ handleEnvImportFlowMock . mockRestore ( ) ;
804+ } ) ;
651805 } ) ;
652806} ) ;
653807
0 commit comments