github.com/xgoffin/jenkins-library@v1.154.0/cmd/npmExecuteScripts_test.go (about)

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