github.com/xgoffin/jenkins-library@v1.154.0/cmd/hadolintExecute_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/SAP/jenkins-library/pkg/hadolint/mocks"
     7  	piperMocks "github.com/SAP/jenkins-library/pkg/mock"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/mock"
    10  )
    11  
    12  func TestRunHadolintExecute(t *testing.T) {
    13  	t.Run("default", func(t *testing.T) {
    14  		// init
    15  		fileMock := &mocks.HadolintPiperFileUtils{}
    16  		clientMock := &mocks.HadolintClient{}
    17  		runnerMock := &piperMocks.ExecMockRunner{}
    18  		config := hadolintExecuteOptions{
    19  			DockerFile:        "./Dockerfile",   // default
    20  			ConfigurationFile: ".hadolint.yaml", // default
    21  		}
    22  
    23  		fileMock.
    24  			On("FileExists", config.ConfigurationFile).Return(false, nil)
    25  
    26  		// test
    27  		err := runHadolint(config, hadolintUtils{
    28  			HadolintPiperFileUtils: fileMock,
    29  			HadolintClient:         clientMock,
    30  			hadolintRunner:         runnerMock,
    31  		})
    32  		// assert
    33  		assert.NoError(t, err)
    34  		if assert.Len(t, runnerMock.Calls, 1) {
    35  			assert.Equal(t, "hadolint", runnerMock.Calls[0].Exec)
    36  			assert.Contains(t, runnerMock.Calls[0].Params, config.DockerFile)
    37  			assert.Contains(t, runnerMock.Calls[0].Params, "--format")
    38  			assert.Contains(t, runnerMock.Calls[0].Params, "checkstyle")
    39  			assert.NotContains(t, runnerMock.Calls[0].Params, "--config")
    40  			assert.NotContains(t, runnerMock.Calls[0].Params, config.ConfigurationFile)
    41  		}
    42  		// assert that mocks are called as previously defined
    43  		fileMock.AssertExpectations(t)
    44  		clientMock.AssertExpectations(t)
    45  	})
    46  
    47  	t.Run("with remote config", func(t *testing.T) {
    48  		// init
    49  		fileMock := &mocks.HadolintPiperFileUtils{}
    50  		clientMock := &mocks.HadolintClient{}
    51  		runnerMock := &piperMocks.ExecMockRunner{}
    52  		config := hadolintExecuteOptions{
    53  			DockerFile:        "./Dockerfile",   // default
    54  			ConfigurationFile: ".hadolint.yaml", // default
    55  			ConfigurationURL:  "https://myconfig",
    56  		}
    57  
    58  		clientMock.
    59  			On("SetOptions", mock.Anything).
    60  			On("DownloadFile", config.ConfigurationURL, config.ConfigurationFile, mock.Anything, mock.Anything).Return(nil)
    61  		fileMock.
    62  			// checks if config exists before downloading
    63  			On("FileExists", config.ConfigurationFile).Return(false, nil).Once().
    64  			// checks again but config is now downloaded
    65  			On("FileExists", config.ConfigurationFile).Return(true, nil)
    66  		// test
    67  		err := runHadolint(config, hadolintUtils{
    68  			HadolintPiperFileUtils: fileMock,
    69  			HadolintClient:         clientMock,
    70  			hadolintRunner:         runnerMock,
    71  		})
    72  		// assert
    73  		assert.NoError(t, err)
    74  		if assert.Len(t, runnerMock.Calls, 1) {
    75  			assert.Equal(t, "hadolint", runnerMock.Calls[0].Exec)
    76  			assert.Contains(t, runnerMock.Calls[0].Params, config.DockerFile)
    77  			assert.Contains(t, runnerMock.Calls[0].Params, "--format")
    78  			assert.Contains(t, runnerMock.Calls[0].Params, "checkstyle")
    79  			assert.Contains(t, runnerMock.Calls[0].Params, "--config")
    80  			assert.Contains(t, runnerMock.Calls[0].Params, config.ConfigurationFile)
    81  		}
    82  		// assert that mocks are called as previously defined
    83  		fileMock.AssertExpectations(t)
    84  		clientMock.AssertExpectations(t)
    85  	})
    86  }