github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/transportrequest/solman/upload_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package solman
     5  
     6  import (
     7  	"fmt"
     8  	"github.com/SAP/jenkins-library/pkg/mock"
     9  	"github.com/stretchr/testify/assert"
    10  	"testing"
    11  )
    12  
    13  func TestSolmanUpload(t *testing.T) {
    14  
    15  	f := &mock.FilesMock{}
    16  	f.AddFile("myDeployable.xxx", []byte(""))
    17  
    18  	defaultUploadAction := UploadAction{}
    19  	defaultUploadAction.WithConnection(
    20  		Connection{
    21  			Endpoint: "https://example.org/solman",
    22  			User:     "me",
    23  			Password: "******",
    24  		})
    25  	defaultUploadAction.WithChangeDocumentID("123456")
    26  	defaultUploadAction.WithTransportRequestID("000K11111111")
    27  	defaultUploadAction.WithApplicationID("MY_APP")
    28  	defaultUploadAction.WithFile("myDeployable.xxx")
    29  	defaultUploadAction.WithCMOpts([]string{"-Dmyprop1=abc", "-Dmyprop2=def"})
    30  
    31  	t.Run("Deployable does not exist", func(t *testing.T) {
    32  
    33  		uploadActionFileMissing := defaultUploadAction
    34  		uploadActionFileMissing.WithFile("myMissingDeployable.xxx")
    35  		e := &mock.ExecMockRunner{}
    36  
    37  		err := uploadActionFileMissing.Perform(f, e)
    38  
    39  		assert.EqualError(t, err, "cannot upload artifact 'myMissingDeployable.xxx': file 'myMissingDeployable.xxx' does not exist")
    40  	})
    41  
    42  	t.Run("Straight forward", func(t *testing.T) {
    43  
    44  		e := &mock.ExecMockRunner{}
    45  
    46  		err := defaultUploadAction.Perform(f, e)
    47  
    48  		if assert.NoError(t, err) {
    49  			assert.Len(t, e.Calls, 1)
    50  			assert.Equal(t, mock.ExecCall{
    51  				Exec: "cmclient",
    52  				Params: []string{
    53  					"--endpoint", "https://example.org/solman",
    54  					"--user", "me",
    55  					"--password", "******",
    56  					"upload-file-to-transport",
    57  					"-cID", "123456",
    58  					"-tID", "000K11111111",
    59  					"MY_APP",
    60  					"myDeployable.xxx",
    61  				},
    62  			}, e.Calls[0])
    63  			assert.Equal(t, []string{"CMCLIENT_OPTS=-Dmyprop1=abc -Dmyprop2=def"}, e.Env)
    64  		}
    65  	})
    66  
    67  	t.Run("Missing parameters", func(t *testing.T) {
    68  		e := &mock.ExecMockRunner{}
    69  		uploadAction := defaultUploadAction
    70  		uploadAction.WithConnection(
    71  			Connection{
    72  				Endpoint: "",
    73  				User:     "me",
    74  				Password: "******",
    75  			},
    76  		)
    77  		uploadAction.WithTransportRequestID("")
    78  		err := uploadAction.Perform(f, e)
    79  		if assert.Error(t, err) {
    80  			// we should not rely on the order of the missing parameters
    81  			assert.Contains(t, err.Error(), "cannot upload artifact 'myDeployable.xxx': the following parameters are not available")
    82  			assert.Contains(t, err.Error(), "Connection.Endpoint")
    83  			assert.Contains(t, err.Error(), "TransportRequestID")
    84  		}
    85  	})
    86  
    87  	t.Run("Deploy command returns with return code not equal zero", func(t *testing.T) {
    88  
    89  		e := &mock.ExecMockRunner{}
    90  		e.ExitCode = 1
    91  
    92  		err := defaultUploadAction.Perform(f, e)
    93  
    94  		assert.EqualError(t, err, "cannot upload artifact 'myDeployable.xxx': upload command returned with exit code '1'")
    95  	})
    96  
    97  	t.Run("Deploy command cannot be executed", func(t *testing.T) {
    98  
    99  		e := &mock.ExecMockRunner{
   100  			ShouldFailOnCommand: map[string]error{
   101  				"cmclient.*": fmt.Errorf("cannot execute upload command"),
   102  			},
   103  		}
   104  
   105  		err := defaultUploadAction.Perform(f, e)
   106  
   107  		assert.EqualError(t, err, "cannot upload artifact 'myDeployable.xxx': cannot execute upload command")
   108  	})
   109  
   110  }