@@ -648,6 +648,161 @@ 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+ 'disable-cs-auth' : false ,
679+ } ,
680+ framework : 'GATSBY' ,
681+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
682+ outputDirectories : { GATSBY : './public' } ,
683+ } ,
684+ log : logMock ,
685+ exit : exitMock ,
686+ } as any ) ;
687+
688+ const handleEnvImportFlowMock = jest
689+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
690+ . mockResolvedValue ( undefined ) ;
691+
692+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
693+
694+ expect ( cliux . inquire ) . toHaveBeenCalledWith (
695+ expect . objectContaining ( {
696+ type : 'confirm' ,
697+ name : 'contentstackAuth' ,
698+ default : true ,
699+ } ) ,
700+ ) ;
701+ expect ( fileUploadInstance . config . isContentstackAuthenticationEnabled ) . toBe ( expected ) ;
702+
703+ createSignedUploadUrlMock . mockRestore ( ) ;
704+ archiveMock . mockRestore ( ) ;
705+ uploadFileMock . mockRestore ( ) ;
706+ handleEnvImportFlowMock . mockRestore ( ) ;
707+ } ,
708+ ) ;
709+
710+
711+ it ( 'should disable Contentstack Authentication without prompt when --disable-cs-auth is passed' , async ( ) => {
712+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'test-project' ) ;
713+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
714+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
715+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
716+
717+ const createSignedUploadUrlMock = jest
718+ . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
719+ . mockResolvedValue ( { uploadUid : 'test-upload-uid' } ) ;
720+ const archiveMock = jest
721+ . spyOn ( FileUpload . prototype as any , 'archive' )
722+ . mockResolvedValue ( { zipName : 'test.zip' , zipPath : '/path/to/test.zip' , projectName : 'test-project' } ) ;
723+ const uploadFileMock = jest
724+ . spyOn ( FileUpload . prototype as any , 'uploadFile' )
725+ . mockResolvedValue ( undefined ) ;
726+
727+ const fileUploadInstance = new FileUpload ( {
728+ config : {
729+ flags : {
730+ 'response-mode' : 'buffered' ,
731+ 'disable-cs-auth' : true ,
732+ } ,
733+ framework : 'GATSBY' ,
734+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
735+ outputDirectories : { GATSBY : './public' } ,
736+ } ,
737+ log : logMock ,
738+ exit : exitMock ,
739+ } as any ) ;
740+
741+ const handleEnvImportFlowMock = jest
742+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
743+ . mockResolvedValue ( undefined ) ;
744+
745+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
746+
747+ const contentstackAuthCalls = ( cliux . inquire as jest . Mock ) . mock . calls . filter (
748+ ( call ) => call [ 0 ] ?. name === 'contentstackAuth' ,
749+ ) ;
750+ expect ( contentstackAuthCalls . length ) . toBe ( 0 ) ;
751+ expect ( fileUploadInstance . config . isContentstackAuthenticationEnabled ) . toBe ( false ) ;
752+
753+ createSignedUploadUrlMock . mockRestore ( ) ;
754+ archiveMock . mockRestore ( ) ;
755+ uploadFileMock . mockRestore ( ) ;
756+ handleEnvImportFlowMock . mockRestore ( ) ;
757+ } ) ;
758+
759+ it ( 'should enable Contentstack Authentication without prompt when --enable-cs-auth is passed' , async ( ) => {
760+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'test-project' ) ;
761+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'Default' ) ;
762+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( 'npm run build' ) ;
763+ ( cliux . inquire as jest . Mock ) . mockResolvedValueOnce ( './public' ) ;
764+
765+ const createSignedUploadUrlMock = jest
766+ . spyOn ( FileUpload . prototype as any , 'createSignedUploadUrl' )
767+ . mockResolvedValue ( { uploadUid : 'test-upload-uid' } ) ;
768+ const archiveMock = jest
769+ . spyOn ( FileUpload . prototype as any , 'archive' )
770+ . mockResolvedValue ( { zipName : 'test.zip' , zipPath : '/path/to/test.zip' , projectName : 'test-project' } ) ;
771+ const uploadFileMock = jest
772+ . spyOn ( FileUpload . prototype as any , 'uploadFile' )
773+ . mockResolvedValue ( undefined ) ;
774+
775+ const fileUploadInstance = new FileUpload ( {
776+ config : {
777+ flags : {
778+ 'response-mode' : 'buffered' ,
779+ 'enable-cs-auth' : true ,
780+ } ,
781+ framework : 'GATSBY' ,
782+ supportedFrameworksForServerCommands : [ 'ANGULAR' , 'OTHER' , 'REMIX' , 'NUXT' ] ,
783+ outputDirectories : { GATSBY : './public' } ,
784+ } ,
785+ log : logMock ,
786+ exit : exitMock ,
787+ } as any ) ;
788+
789+ const handleEnvImportFlowMock = jest
790+ . spyOn ( fileUploadInstance , 'handleEnvImportFlow' as any )
791+ . mockResolvedValue ( undefined ) ;
792+
793+ await fileUploadInstance . prepareAndUploadNewProjectFile ( ) ;
794+
795+ const contentstackAuthCalls = ( cliux . inquire as jest . Mock ) . mock . calls . filter (
796+ ( call ) => call [ 0 ] ?. name === 'contentstackAuth' ,
797+ ) ;
798+ expect ( contentstackAuthCalls . length ) . toBe ( 0 ) ;
799+ expect ( fileUploadInstance . config . isContentstackAuthenticationEnabled ) . toBe ( true ) ;
800+
801+ createSignedUploadUrlMock . mockRestore ( ) ;
802+ archiveMock . mockRestore ( ) ;
803+ uploadFileMock . mockRestore ( ) ;
804+ handleEnvImportFlowMock . mockRestore ( ) ;
805+ } ) ;
651806 } ) ;
652807} ) ;
653808
0 commit comments