github.com/SAP/jenkins-library@v1.362.0/cmd/npmExecuteScripts_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package cmd 5 6 import ( 7 "os" 8 "testing" 9 10 "github.com/SAP/jenkins-library/pkg/config" 11 "github.com/SAP/jenkins-library/pkg/mock" 12 "github.com/SAP/jenkins-library/pkg/npm" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 // NpmMockUtilsBundle for mocking 17 type NpmMockUtilsBundle struct { 18 *mock.FilesMock 19 execRunner *mock.ExecMockRunner 20 } 21 22 // GetExecRunner return the execRunner mock 23 func (u *NpmMockUtilsBundle) GetExecRunner() npm.ExecRunner { 24 return u.execRunner 25 } 26 27 // newNpmMockUtilsBundle creates an instance of NpmMockUtilsBundle 28 func newNpmMockUtilsBundle() NpmMockUtilsBundle { 29 utils := NpmMockUtilsBundle{FilesMock: &mock.FilesMock{}, execRunner: &mock.ExecMockRunner{}} 30 return utils 31 } 32 33 func TestNpmExecuteScripts(t *testing.T) { 34 cpe := npmExecuteScriptsCommonPipelineEnvironment{} 35 36 t.Run("Call with packagesList", func(t *testing.T) { 37 cfg := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, BuildDescriptorList: []string{"package.json", "src/package.json"}} 38 utils := npm.NewNpmMockUtilsBundle() 39 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 40 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 41 42 SetConfigOptions(ConfigCommandOptions{ 43 OpenFile: config.OpenPiperFile, 44 }) 45 46 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: cfg.Install, RunScripts: cfg.RunScripts, PackagesList: cfg.BuildDescriptorList}} 47 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 48 49 assert.NoError(t, err) 50 }) 51 52 t.Run("Call with excludeList", func(t *testing.T) { 53 cfg := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, BuildDescriptorExcludeList: []string{"**/path/**"}} 54 utils := npm.NewNpmMockUtilsBundle() 55 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 56 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 57 58 SetConfigOptions(ConfigCommandOptions{ 59 OpenFile: config.OpenPiperFile, 60 }) 61 62 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: cfg.Install, RunScripts: cfg.RunScripts, ExcludeList: cfg.BuildDescriptorExcludeList}} 63 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 64 65 assert.NoError(t, err) 66 }) 67 68 t.Run("Call with scriptOptions", func(t *testing.T) { 69 cfg := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, ScriptOptions: []string{"--run"}} 70 utils := npm.NewNpmMockUtilsBundle() 71 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 72 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 73 74 SetConfigOptions(ConfigCommandOptions{ 75 OpenFile: config.OpenPiperFile, 76 }) 77 78 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: cfg.Install, RunScripts: cfg.RunScripts, ScriptOptions: cfg.ScriptOptions}} 79 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 80 81 assert.NoError(t, err) 82 }) 83 84 t.Run("Call with install", func(t *testing.T) { 85 cfg := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}} 86 utils := npm.NewNpmMockUtilsBundle() 87 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 88 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 89 90 SetConfigOptions(ConfigCommandOptions{ 91 OpenFile: config.OpenPiperFile, 92 }) 93 94 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: cfg.Install, RunScripts: cfg.RunScripts}} 95 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 96 97 assert.NoError(t, err) 98 }) 99 100 t.Run("Call without install", func(t *testing.T) { 101 cfg := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}} 102 utils := npm.NewNpmMockUtilsBundle() 103 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 104 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 105 106 SetConfigOptions(ConfigCommandOptions{ 107 OpenFile: config.OpenPiperFile, 108 }) 109 110 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: cfg.Install, RunScripts: cfg.RunScripts}} 111 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 112 113 assert.NoError(t, err) 114 }) 115 116 t.Run("Call with virtualFrameBuffer", func(t *testing.T) { 117 cfg := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, VirtualFrameBuffer: true} 118 utils := npm.NewNpmMockUtilsBundle() 119 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 120 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 121 122 SetConfigOptions(ConfigCommandOptions{ 123 OpenFile: config.OpenPiperFile, 124 }) 125 126 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: cfg.Install, RunScripts: cfg.RunScripts, VirtualFrameBuffer: cfg.VirtualFrameBuffer}} 127 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 128 129 assert.NoError(t, err) 130 }) 131 132 t.Run("Test integration with npm pkg", func(t *testing.T) { 133 cfg := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build"}} 134 135 options := npm.ExecutorOptions{DefaultNpmRegistry: cfg.DefaultNpmRegistry} 136 137 utils := newNpmMockUtilsBundle() 138 utils.AddFile("package.json", []byte("{\"scripts\": { \"ci-build\": \"\" } }")) 139 utils.AddFile("package-lock.json", []byte("")) 140 141 npmExecutor := npm.Execute{Utils: &utils, Options: options} 142 143 SetConfigOptions(ConfigCommandOptions{ 144 OpenFile: config.OpenPiperFile, 145 }) 146 147 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 148 149 if assert.NoError(t, err) { 150 if assert.Equal(t, 4, len(utils.execRunner.Calls)) { 151 assert.Equal(t, mock.ExecCall{Exec: "npm", Params: []string{"config", "get", "registry"}}, utils.execRunner.Calls[0]) 152 assert.Equal(t, mock.ExecCall{Exec: "npm", Params: []string{"ci"}}, utils.execRunner.Calls[1]) 153 assert.Equal(t, mock.ExecCall{Exec: "npm", Params: []string{"run", "ci-build"}}, utils.execRunner.Calls[3]) 154 } 155 } 156 }) 157 158 t.Run("Call with createBOM", func(t *testing.T) { 159 cfg := npmExecuteScriptsOptions{CreateBOM: true, RunScripts: []string{"ci-build", "ci-test"}} 160 161 options := npm.ExecutorOptions{DefaultNpmRegistry: cfg.DefaultNpmRegistry} 162 163 utils := newNpmMockUtilsBundle() 164 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 165 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 166 167 SetConfigOptions(ConfigCommandOptions{ 168 OpenFile: config.OpenPiperFile, 169 }) 170 171 npmExecutor := npm.Execute{Utils: &utils, Options: options} 172 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 173 174 assert.NoError(t, err) 175 }) 176 177 t.Run("Call with production", func(t *testing.T) { 178 cfg := npmExecuteScriptsOptions{Production: true, RunScripts: []string{"ci-build", "ci-test"}} 179 180 options := npm.ExecutorOptions{DefaultNpmRegistry: cfg.DefaultNpmRegistry} 181 182 utils := newNpmMockUtilsBundle() 183 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 184 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 185 186 SetConfigOptions(ConfigCommandOptions{ 187 OpenFile: config.OpenPiperFile, 188 }) 189 190 npmExecutor := npm.Execute{Utils: &utils, Options: options} 191 err := runNpmExecuteScripts(&npmExecutor, &cfg, &cpe) 192 assert.NoError(t, err) 193 194 v := os.Getenv("NODE_ENV") 195 assert.Equal(t, "production", v) 196 }) 197 }