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 }