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  }