github.com/jaylevin/jenkins-library@v1.230.4/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  }