github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/cmd/npmExecuteScripts_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package cmd 5 6 import ( 7 "testing" 8 9 "github.com/SAP/jenkins-library/pkg/mock" 10 "github.com/SAP/jenkins-library/pkg/npm" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 // NpmMockUtilsBundle for mocking 15 type NpmMockUtilsBundle struct { 16 *mock.FilesMock 17 execRunner *mock.ExecMockRunner 18 } 19 20 // GetExecRunner return the execRunner mock 21 func (u *NpmMockUtilsBundle) GetExecRunner() npm.ExecRunner { 22 return u.execRunner 23 } 24 25 // newNpmMockUtilsBundle creates an instance of NpmMockUtilsBundle 26 func newNpmMockUtilsBundle() NpmMockUtilsBundle { 27 utils := NpmMockUtilsBundle{FilesMock: &mock.FilesMock{}, execRunner: &mock.ExecMockRunner{}} 28 return utils 29 } 30 31 func TestNpmExecuteScripts(t *testing.T) { 32 cpe := npmExecuteScriptsCommonPipelineEnvironment{} 33 34 t.Run("Call with packagesList", func(t *testing.T) { 35 config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, BuildDescriptorList: []string{"package.json", "src/package.json"}} 36 utils := npm.NewNpmMockUtilsBundle() 37 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 38 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 39 40 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, PackagesList: config.BuildDescriptorList}} 41 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 42 43 assert.NoError(t, err) 44 }) 45 46 t.Run("Call with excludeList", func(t *testing.T) { 47 config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, BuildDescriptorExcludeList: []string{"**/path/**"}} 48 utils := npm.NewNpmMockUtilsBundle() 49 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 50 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 51 52 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, ExcludeList: config.BuildDescriptorExcludeList}} 53 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 54 55 assert.NoError(t, err) 56 }) 57 58 t.Run("Call with scriptOptions", func(t *testing.T) { 59 config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, ScriptOptions: []string{"--run"}} 60 utils := npm.NewNpmMockUtilsBundle() 61 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 62 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 63 64 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, ScriptOptions: config.ScriptOptions}} 65 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 66 67 assert.NoError(t, err) 68 }) 69 70 t.Run("Call with install", func(t *testing.T) { 71 config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}} 72 utils := npm.NewNpmMockUtilsBundle() 73 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 74 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 75 76 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts}} 77 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 78 79 assert.NoError(t, err) 80 }) 81 82 t.Run("Call without install", func(t *testing.T) { 83 config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}} 84 utils := npm.NewNpmMockUtilsBundle() 85 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 86 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 87 88 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts}} 89 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 90 91 assert.NoError(t, err) 92 }) 93 94 t.Run("Call with virtualFrameBuffer", func(t *testing.T) { 95 config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, VirtualFrameBuffer: true} 96 utils := npm.NewNpmMockUtilsBundle() 97 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 98 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 99 100 npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, VirtualFrameBuffer: config.VirtualFrameBuffer}} 101 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 102 103 assert.NoError(t, err) 104 }) 105 106 t.Run("Test integration with npm pkg", func(t *testing.T) { 107 config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build"}} 108 109 options := npm.ExecutorOptions{DefaultNpmRegistry: config.DefaultNpmRegistry} 110 111 utils := newNpmMockUtilsBundle() 112 utils.AddFile("package.json", []byte("{\"scripts\": { \"ci-build\": \"\" } }")) 113 utils.AddFile("package-lock.json", []byte("")) 114 115 npmExecutor := npm.Execute{Utils: &utils, Options: options} 116 117 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 118 119 if assert.NoError(t, err) { 120 if assert.Equal(t, 4, len(utils.execRunner.Calls)) { 121 assert.Equal(t, mock.ExecCall{Exec: "npm", Params: []string{"config", "get", "registry"}}, utils.execRunner.Calls[0]) 122 assert.Equal(t, mock.ExecCall{Exec: "npm", Params: []string{"ci"}}, utils.execRunner.Calls[1]) 123 assert.Equal(t, mock.ExecCall{Exec: "npm", Params: []string{"run", "ci-build"}}, utils.execRunner.Calls[3]) 124 } 125 } 126 }) 127 128 t.Run("Call with createBOM", func(t *testing.T) { 129 config := npmExecuteScriptsOptions{CreateBOM: true, RunScripts: []string{"ci-build", "ci-test"}} 130 131 options := npm.ExecutorOptions{DefaultNpmRegistry: config.DefaultNpmRegistry} 132 133 utils := newNpmMockUtilsBundle() 134 utils.AddFile("package.json", []byte("{\"name\": \"Test\" }")) 135 utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }")) 136 137 npmExecutor := npm.Execute{Utils: &utils, Options: options} 138 err := runNpmExecuteScripts(&npmExecutor, &config, &cpe) 139 140 assert.NoError(t, err) 141 }) 142 }