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