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  }