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  }