github.com/xgoffin/jenkins-library@v1.154.0/cmd/gaugeExecuteTests_test.go (about) 1 package cmd 2 3 import ( 4 "errors" 5 "path/filepath" 6 "testing" 7 8 "github.com/SAP/jenkins-library/pkg/mock" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 type gaugeExecuteTestsMockUtils struct { 13 *mock.ExecMockRunner 14 *mock.FilesMock 15 } 16 17 func (utils gaugeExecuteTestsMockUtils) Getenv(key string) string { 18 if key == "HOME" { 19 return filepath.FromSlash("/home/node") 20 } 21 return "" 22 } 23 24 func TestRunGaugeExecuteTests(t *testing.T) { 25 t.Parallel() 26 27 allFineConfig := gaugeExecuteTestsOptions{ 28 InstallCommand: "npm install -g @getgauge/cli", 29 LanguageRunner: "java", 30 RunCommand: "run", 31 TestOptions: "specs", 32 } 33 gaugeBinRegEx := "home.node..npm-global.bin.gauge" 34 35 t.Run("success case", func(t *testing.T) { 36 t.Parallel() 37 38 mockUtils := gaugeExecuteTestsMockUtils{ 39 ExecMockRunner: &mock.ExecMockRunner{}, 40 FilesMock: &mock.FilesMock{}, 41 } 42 43 err := runGaugeExecuteTests(&allFineConfig, nil, &mockUtils) 44 45 assert.NoError(t, err) 46 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Exec, "npm") 47 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Params, []string{"install", "-g", "@getgauge/cli", "--prefix=~/.npm-global"}) 48 assert.Equal(t, mockUtils.ExecMockRunner.Calls[1].Exec, filepath.FromSlash("/home/node/.npm-global/bin/gauge")) 49 assert.Equal(t, mockUtils.ExecMockRunner.Calls[1].Params, []string{"install", "java"}) 50 assert.Equal(t, mockUtils.ExecMockRunner.Calls[2].Exec, filepath.FromSlash("/home/node/.npm-global/bin/gauge")) 51 assert.Equal(t, mockUtils.ExecMockRunner.Calls[2].Params, []string{"run", "specs"}) 52 }) 53 54 t.Run("fail on installation", func(t *testing.T) { 55 t.Parallel() 56 57 badInstallConfig := allFineConfig 58 badInstallConfig.InstallCommand = "npm install -g @wronggauge/cli" 59 60 mockUtils := gaugeExecuteTestsMockUtils{ 61 ExecMockRunner: &mock.ExecMockRunner{ShouldFailOnCommand: map[string]error{"npm install -g @wronggauge/cli": errors.New("cannot find module")}}, 62 FilesMock: &mock.FilesMock{}, 63 } 64 65 err := runGaugeExecuteTests(&badInstallConfig, nil, &mockUtils) 66 assert.True(t, errors.Is(err, ErrorGaugeInstall)) 67 68 assert.Equal(t, len(mockUtils.ExecMockRunner.Calls), 1) 69 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Exec, "npm") 70 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Params, []string{"install", "-g", "@wronggauge/cli", "--prefix=~/.npm-global"}) 71 }) 72 73 t.Run("fail on installing language runner", func(t *testing.T) { 74 t.Parallel() 75 badInstallConfig := allFineConfig 76 badInstallConfig.LanguageRunner = "wrong" 77 78 mockUtils := gaugeExecuteTestsMockUtils{ 79 ExecMockRunner: &mock.ExecMockRunner{ShouldFailOnCommand: map[string]error{gaugeBinRegEx + " install wrong": errors.New("error installing runner")}}, 80 FilesMock: &mock.FilesMock{}, 81 } 82 83 err := runGaugeExecuteTests(&badInstallConfig, nil, &mockUtils) 84 assert.True(t, errors.Is(err, ErrorGaugeRunnerInstall)) 85 86 assert.Equal(t, len(mockUtils.ExecMockRunner.Calls), 2) 87 88 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Exec, "npm") 89 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Params, []string{"install", "-g", "@getgauge/cli", "--prefix=~/.npm-global"}) 90 assert.Equal(t, mockUtils.ExecMockRunner.Calls[1].Exec, filepath.FromSlash("/home/node/.npm-global/bin/gauge")) 91 assert.Equal(t, mockUtils.ExecMockRunner.Calls[1].Params, []string{"install", "wrong"}) 92 }) 93 t.Run("fail on gauge run", func(t *testing.T) { 94 t.Parallel() 95 96 mockUtils := gaugeExecuteTestsMockUtils{ 97 ExecMockRunner: &mock.ExecMockRunner{ShouldFailOnCommand: map[string]error{gaugeBinRegEx + " run specs": errors.New("error running gauge")}}, 98 FilesMock: &mock.FilesMock{}, 99 } 100 101 err := runGaugeExecuteTests(&allFineConfig, nil, &mockUtils) 102 assert.True(t, errors.Is(err, ErrorGaugeRun)) 103 104 assert.Equal(t, len(mockUtils.ExecMockRunner.Calls), 3) 105 106 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Exec, "npm") 107 assert.Equal(t, mockUtils.ExecMockRunner.Calls[0].Params, []string{"install", "-g", "@getgauge/cli", "--prefix=~/.npm-global"}) 108 assert.Equal(t, mockUtils.ExecMockRunner.Calls[1].Exec, filepath.FromSlash("/home/node/.npm-global/bin/gauge")) 109 assert.Equal(t, mockUtils.ExecMockRunner.Calls[1].Params, []string{"install", "java"}) 110 assert.Equal(t, mockUtils.ExecMockRunner.Calls[2].Exec, filepath.FromSlash("/home/node/.npm-global/bin/gauge")) 111 assert.Equal(t, mockUtils.ExecMockRunner.Calls[2].Params, []string{"run", "specs"}) 112 }) 113 }