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

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/SAP/jenkins-library/pkg/mock"
     6  	"github.com/SAP/jenkins-library/pkg/transportrequest/solman"
     7  	"github.com/stretchr/testify/assert"
     8  	"testing"
     9  )
    10  
    11  type transportRequestUploadSOLMANMockUtils struct {
    12  	*mock.ExecMockRunner
    13  	*mock.FilesMock
    14  }
    15  
    16  func newTransportRequestUploadSOLMANTestsUtils(exitcode int) transportRequestUploadSOLMANMockUtils {
    17  	utils := transportRequestUploadSOLMANMockUtils{
    18  		ExecMockRunner: &mock.ExecMockRunner{ExitCode: exitcode},
    19  		FilesMock:      &mock.FilesMock{},
    20  	}
    21  	return utils
    22  }
    23  
    24  type ActionMock struct {
    25  	received      solman.UploadAction
    26  	performCalled bool
    27  	failWith      error
    28  }
    29  
    30  func (a *ActionMock) WithConnection(c solman.Connection) {
    31  	a.received.Connection = c
    32  }
    33  func (a *ActionMock) WithChangeDocumentID(id string) {
    34  	a.received.ChangeDocumentID = id
    35  }
    36  func (a *ActionMock) WithTransportRequestID(id string) {
    37  	a.received.TransportRequestID = id
    38  }
    39  func (a *ActionMock) WithApplicationID(id string) {
    40  	a.received.ApplicationID = id
    41  }
    42  func (a *ActionMock) WithFile(f string) {
    43  	a.received.File = f
    44  }
    45  func (a *ActionMock) WithCMOpts(opts []string) {
    46  	a.received.CMOpts = opts
    47  }
    48  func (a *ActionMock) Perform(fs solman.FileSystem, command solman.Exec) error {
    49  	a.performCalled = true
    50  	return a.failWith
    51  }
    52  
    53  type ConfigMock struct {
    54  	config *transportRequestUploadSOLMANOptions
    55  }
    56  
    57  func TestTrSolmanRunTransportRequestUpload(t *testing.T) {
    58  	t.Parallel()
    59  
    60  	t.Run("good", func(t *testing.T) {
    61  		t.Parallel()
    62  
    63  		t.Run("straight forward", func(t *testing.T) {
    64  			utilsMock := newTransportRequestUploadSOLMANTestsUtils(0)
    65  			configMock := newConfigMock()
    66  			actionMock := ActionMock{}
    67  			cpe := &transportRequestUploadSOLMANCommonPipelineEnvironment{}
    68  
    69  			err := runTransportRequestUploadSOLMAN(configMock.config, &actionMock, nil, utilsMock, cpe)
    70  
    71  			if assert.NoError(t, err) {
    72  				assert.Equal(t, actionMock.received, solman.UploadAction{
    73  					Connection: solman.Connection{
    74  						Endpoint: "https://example.org/solman",
    75  						User:     "me",
    76  						Password: "********",
    77  					},
    78  					ApplicationID:      "XYZ",
    79  					ChangeDocumentID:   "12345678",
    80  					TransportRequestID: "87654321",
    81  					File:               "myApp.abc",
    82  					CMOpts:             []string{"-Dtest=abc123"},
    83  				})
    84  				assert.True(t, actionMock.performCalled)
    85  			}
    86  		})
    87  	})
    88  
    89  	t.Run("bad", func(t *testing.T) {
    90  		t.Parallel()
    91  
    92  		t.Run("Error during deployment", func(t *testing.T) {
    93  			utilsMock := newTransportRequestUploadSOLMANTestsUtils(0)
    94  			configMock := newConfigMock()
    95  			actionMock := ActionMock{failWith: fmt.Errorf("upload failed")}
    96  			cpe := &transportRequestUploadSOLMANCommonPipelineEnvironment{}
    97  
    98  			err := runTransportRequestUploadSOLMAN(configMock.config, &actionMock, nil, utilsMock, cpe)
    99  
   100  			assert.Error(t, err, "upload failed")
   101  		})
   102  	})
   103  }
   104  
   105  func newConfigMock() *ConfigMock {
   106  	return &ConfigMock{
   107  		config: &transportRequestUploadSOLMANOptions{
   108  			Endpoint:           "https://example.org/solman",
   109  			Username:           "me",
   110  			Password:           "********",
   111  			ApplicationID:      "XYZ",
   112  			ChangeDocumentID:   "12345678",
   113  			TransportRequestID: "87654321",
   114  			FilePath:           "myApp.abc",
   115  			CmClientOpts:       []string{"-Dtest=abc123"},
   116  		},
   117  	}
   118  }