github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/cmd/mavenExecute_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package cmd
     5  
     6  import (
     7  	"errors"
     8  	"github.com/SAP/jenkins-library/pkg/mock"
     9  	"github.com/stretchr/testify/assert"
    10  	"net/http"
    11  	"testing"
    12  )
    13  
    14  type mavenMockUtils struct {
    15  	shouldFail bool
    16  	*mock.FilesMock
    17  	*mock.ExecMockRunner
    18  }
    19  
    20  func (m *mavenMockUtils) DownloadFile(_, _ string, _ http.Header, _ []*http.Cookie) error {
    21  	return errors.New("Test should not download files.")
    22  }
    23  
    24  func newMavenMockUtils() mavenMockUtils {
    25  	utils := mavenMockUtils{
    26  		shouldFail:     false,
    27  		FilesMock:      &mock.FilesMock{},
    28  		ExecMockRunner: &mock.ExecMockRunner{},
    29  	}
    30  	return utils
    31  }
    32  
    33  func TestMavenExecute(t *testing.T) {
    34  	t.Run("mavenExecute should write output file", func(t *testing.T) {
    35  		// init
    36  		config := mavenExecuteOptions{
    37  			Goals:                       []string{"goal"},
    38  			LogSuccessfulMavenTransfers: true,
    39  			ReturnStdout:                true,
    40  		}
    41  
    42  		mockUtils := newMavenMockUtils()
    43  		mockUtils.StdoutReturn = map[string]string{}
    44  		mockUtils.StdoutReturn[""] = "test output"
    45  
    46  		// test
    47  		err := runMavenExecute(config, &mockUtils)
    48  
    49  		// assert
    50  		expectedParams := []string{
    51  			"--batch-mode", "goal",
    52  		}
    53  
    54  		assert.NoError(t, err)
    55  		if assert.Equal(t, 1, len(mockUtils.Calls)) {
    56  			assert.Equal(t, "mvn", mockUtils.Calls[0].Exec)
    57  			assert.Equal(t, expectedParams, mockUtils.Calls[0].Params)
    58  		}
    59  
    60  		outputFileExists, _ := mockUtils.FileExists(".pipeline/maven_output.txt")
    61  		assert.True(t, outputFileExists)
    62  
    63  		output, _ := mockUtils.FileRead(".pipeline/maven_output.txt")
    64  
    65  		assert.Equal(t, "test output", string(output))
    66  	})
    67  
    68  	t.Run("mavenExecute should NOT write output file", func(t *testing.T) {
    69  		// init
    70  		config := mavenExecuteOptions{
    71  			Goals:                       []string{"goal"},
    72  			LogSuccessfulMavenTransfers: true,
    73  		}
    74  
    75  		mockUtils := newMavenMockUtils()
    76  
    77  		// test
    78  		err := runMavenExecute(config, &mockUtils)
    79  
    80  		// assert
    81  		expectedParams := []string{
    82  			"--batch-mode", "goal",
    83  		}
    84  
    85  		assert.NoError(t, err)
    86  		if assert.Equal(t, 1, len(mockUtils.Calls)) {
    87  			assert.Equal(t, "mvn", mockUtils.Calls[0].Exec)
    88  			assert.Equal(t, expectedParams, mockUtils.Calls[0].Params)
    89  		}
    90  
    91  		outputFileExists, _ := mockUtils.FileExists(".pipeline/maven_output.txt")
    92  		assert.False(t, outputFileExists)
    93  	})
    94  }