github.com/SAP/jenkins-library@v1.362.0/cmd/transportRequestUploadRFC_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package cmd
     5  
     6  import (
     7  	"fmt"
     8  	"github.com/SAP/jenkins-library/pkg/mock"
     9  	"github.com/SAP/jenkins-library/pkg/transportrequest/rfc"
    10  	"github.com/stretchr/testify/assert"
    11  	"testing"
    12  )
    13  
    14  type transportRequestUploadRFCMockUtils struct {
    15  	*mock.ExecMockRunner
    16  }
    17  
    18  func newTransportRequestUploadRFCTestsUtils() transportRequestUploadRFCMockUtils {
    19  	utils := transportRequestUploadRFCMockUtils{
    20  		ExecMockRunner: &mock.ExecMockRunner{},
    21  	}
    22  	return utils
    23  }
    24  
    25  type uploadMock struct {
    26  	received     rfc.UploadAction
    27  	uploadCalled bool
    28  	failWith     error
    29  }
    30  
    31  // WithApplicationURL The location of the deployable
    32  func (m *uploadMock) WithApplicationURL(z string) {
    33  	m.received.ApplicationURL = z
    34  }
    35  
    36  // WithTransportRequestID The transport request ID for the upload
    37  func (m *uploadMock) WithTransportRequestID(t string) {
    38  	m.received.TransportRequestID = t
    39  }
    40  
    41  // WithApplication Everything we need to know about the application
    42  func (m *uploadMock) WithApplication(a rfc.Application) {
    43  	m.received.Application = a
    44  }
    45  
    46  // WithConfiguration Everything we need to know in order to perform the upload
    47  func (m *uploadMock) WithConfiguration(c rfc.UploadConfig) {
    48  	m.received.Configuration = c
    49  }
    50  
    51  // WithConnection Everything we need to know about the connection
    52  func (m *uploadMock) WithConnection(c rfc.Connection) {
    53  	m.received.Connection = c
    54  }
    55  
    56  func (m *uploadMock) Perform(exec rfc.Exec) error {
    57  	m.uploadCalled = true
    58  	return m.failWith
    59  }
    60  
    61  type configMock struct {
    62  	config *transportRequestUploadRFCOptions
    63  }
    64  
    65  func TestTrRfcRunTransportRequestUpload(t *testing.T) {
    66  	t.Parallel()
    67  
    68  	t.Run("good", func(t *testing.T) {
    69  		t.Parallel()
    70  
    71  		utils := newTransportRequestUploadRFCTestsUtils()
    72  		configMock := newRfcConfigMock()
    73  		actionMock := uploadMock{}
    74  		cpe := &transportRequestUploadRFCCommonPipelineEnvironment{}
    75  
    76  		err := runTransportRequestUploadRFC(configMock.config, &actionMock, nil, utils, cpe)
    77  
    78  		if assert.NoError(t, err) {
    79  			t.Run("upload triggered", func(t *testing.T) {
    80  				assert.True(t, actionMock.uploadCalled)
    81  			})
    82  			t.Run("parameters has been marshalled", func(t *testing.T) {
    83  				assert.Equal(t, rfc.UploadAction{
    84  					Connection: rfc.Connection{
    85  						Endpoint: "https://my.abap.server",
    86  						Client:   "001",
    87  						Instance: "00",
    88  						User:     "me",
    89  						Password: "******",
    90  					},
    91  					Application: rfc.Application{
    92  						Name:        "MyApp",
    93  						Description: "Lorem impsum",
    94  						AbapPackage: "ABC",
    95  					},
    96  					Configuration: rfc.UploadConfig{
    97  						AcceptUnixStyleEndOfLine: true,
    98  						CodePage:                 "UTF-8",
    99  						FailUploadOnWarning:      true,
   100  						Verbose:                  false, // comes from general config
   101  					},
   102  					TransportRequestID: "K12345678",
   103  					ApplicationURL:     "http://example.org/myDeployable.zip",
   104  				}, actionMock.received)
   105  
   106  				assert.Equal(t, cpe.custom.transportRequestID, "K12345678")
   107  			})
   108  		}
   109  	})
   110  	t.Run("bad", func(t *testing.T) {
   111  		t.Parallel()
   112  
   113  		t.Run("Error during deployment", func(t *testing.T) {
   114  			utilsMock := newTransportRequestUploadSOLMANTestsUtils(0)
   115  			configMock := newRfcConfigMock()
   116  			actionMock := uploadMock{failWith: fmt.Errorf("upload failed")}
   117  			cpe := &transportRequestUploadRFCCommonPipelineEnvironment{}
   118  
   119  			err := runTransportRequestUploadRFC(configMock.config, &actionMock, nil, utilsMock, cpe)
   120  
   121  			assert.Error(t, err, "upload failed")
   122  		})
   123  	})
   124  }
   125  
   126  func newRfcConfigMock() *configMock {
   127  	return &configMock{
   128  		config: &transportRequestUploadRFCOptions{
   129  			Endpoint:                   "https://my.abap.server",
   130  			Client:                     "001",
   131  			Instance:                   "00",
   132  			Username:                   "me",
   133  			Password:                   "******",
   134  			ApplicationName:            "MyApp",
   135  			ApplicationDescription:     "Lorem impsum",
   136  			AbapPackage:                "ABC",
   137  			ApplicationURL:             "http://example.org/myDeployable.zip",
   138  			CodePage:                   "UTF-8",
   139  			AcceptUnixStyleLineEndings: true,
   140  			FailUploadOnWarning:        true,
   141  			TransportRequestID:         "K12345678",
   142  		},
   143  	}
   144  }