github.com/jaylevin/jenkins-library@v1.230.4/cmd/integrationArtifactUpload_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/SAP/jenkins-library/pkg/mock"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  type integrationArtifactUploadMockUtils struct {
    12  	*mock.ExecMockRunner
    13  	*mock.FilesMock
    14  }
    15  
    16  func newIntegrationArtifactUploadTestsUtils() integrationArtifactUploadMockUtils {
    17  	utils := integrationArtifactUploadMockUtils{
    18  		ExecMockRunner: &mock.ExecMockRunner{},
    19  		FilesMock:      &mock.FilesMock{},
    20  	}
    21  	return utils
    22  }
    23  
    24  func TestRunIntegrationArtifactUpload(t *testing.T) {
    25  	t.Parallel()
    26  
    27  	t.Run("Successfull Integration Flow Create Test", func(t *testing.T) {
    28  		filesMock := mock.FilesMock{}
    29  		path := filepath.Join("tempDir", "iflow4.zip")
    30  		filesMock.AddFile(path, []byte("dummy content"))
    31  		exists, err := filesMock.FileExists(path)
    32  		assert.NoError(t, err)
    33  		assert.True(t, exists)
    34  
    35  		apiServiceKey := `{
    36  			"oauth": {
    37  				"url": "https://demo",
    38  				"clientid": "demouser",
    39  				"clientsecret": "******",
    40  				"tokenurl": "https://demo/oauth/token"
    41  			}
    42  		}`
    43  
    44  		config := integrationArtifactUploadOptions{
    45  			APIServiceKey:       apiServiceKey,
    46  			IntegrationFlowName: "flow4",
    47  			IntegrationFlowID:   "flow4",
    48  			PackageID:           "CICD",
    49  			FilePath:            path,
    50  		}
    51  
    52  		httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "PositiveAndCreateIntegrationDesigntimeArtifactResBody"}
    53  
    54  		err = runIntegrationArtifactUpload(&config, nil, &filesMock, &httpClient)
    55  
    56  		if assert.NoError(t, err) {
    57  
    58  			t.Run("check url", func(t *testing.T) {
    59  				assert.Equal(t, "https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='Active')", httpClient.URL)
    60  			})
    61  
    62  			t.Run("check method", func(t *testing.T) {
    63  				assert.Equal(t, "PUT", httpClient.Method)
    64  			})
    65  		}
    66  	})
    67  
    68  	t.Run("Successfull Integration Flow Update Test", func(t *testing.T) {
    69  
    70  		files := mock.FilesMock{}
    71  		path := filepath.Join("tempDir", "iflow4.zip")
    72  		files.AddFile(path, []byte("dummy content"))
    73  		exists, err := files.FileExists(path)
    74  		assert.NoError(t, err)
    75  		assert.True(t, exists)
    76  		apiServiceKey := `{
    77  			"oauth": {
    78  				"url": "https://demo",
    79  				"clientid": "demouser",
    80  				"clientsecret": "******",
    81  				"tokenurl": "https://demo/oauth/token"
    82  			}
    83  		}`
    84  		config := integrationArtifactUploadOptions{
    85  			APIServiceKey:       apiServiceKey,
    86  			IntegrationFlowName: "flow4",
    87  			IntegrationFlowID:   "flow4",
    88  			PackageID:           "CICD",
    89  			FilePath:            path,
    90  		}
    91  
    92  		httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "PositiveAndUpdateIntegrationDesigntimeArtifactResBody"}
    93  
    94  		err = runIntegrationArtifactUpload(&config, nil, &files, &httpClient)
    95  
    96  		if assert.NoError(t, err) {
    97  
    98  			t.Run("check url", func(t *testing.T) {
    99  				assert.Equal(t, "https://demo/api/v1/IntegrationDesigntimeArtifacts", httpClient.URL)
   100  			})
   101  
   102  			t.Run("check method", func(t *testing.T) {
   103  				assert.Equal(t, "POST", httpClient.Method)
   104  			})
   105  		}
   106  	})
   107  
   108  	t.Run("Failed case of Integration Flow Get Test", func(t *testing.T) {
   109  
   110  		apiServiceKey := `{
   111  			"oauth": {
   112  				"url": "https://demo",
   113  				"clientid": "demouser",
   114  				"clientsecret": "******",
   115  				"tokenurl": "https://demo/oauth/token"
   116  			}
   117  		}`
   118  		config := integrationArtifactUploadOptions{
   119  			APIServiceKey:       apiServiceKey,
   120  			IntegrationFlowName: "flow4",
   121  			IntegrationFlowID:   "flow4",
   122  			PackageID:           "CICD",
   123  			FilePath:            "path",
   124  		}
   125  
   126  		httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "NegativeAndGetIntegrationDesigntimeArtifactResBody"}
   127  
   128  		err := runIntegrationArtifactUpload(&config, nil, nil, &httpClient)
   129  		assert.Error(t, err)
   130  	})
   131  
   132  	t.Run("Failed case of Integration Flow Update Test", func(t *testing.T) {
   133  		files := mock.FilesMock{}
   134  		path := filepath.Join("tempDir", "iflow4.zip")
   135  		files.AddFile(path, []byte("dummy content"))
   136  		exists, err := files.FileExists(path)
   137  		assert.NoError(t, err)
   138  		assert.True(t, exists)
   139  
   140  		apiServiceKey := `{
   141  			"oauth": {
   142  				"url": "https://demo",
   143  				"clientid": "demouser",
   144  				"clientsecret": "******",
   145  				"tokenurl": "https://demo/oauth/token"
   146  			}
   147  		}`
   148  		config := integrationArtifactUploadOptions{
   149  			APIServiceKey:       apiServiceKey,
   150  			IntegrationFlowName: "flow4",
   151  			IntegrationFlowID:   "flow4",
   152  			PackageID:           "CICD",
   153  			FilePath:            path,
   154  		}
   155  
   156  		httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "NegativeAndCreateIntegrationDesigntimeArtifactResBody"}
   157  
   158  		err = runIntegrationArtifactUpload(&config, nil, &files, &httpClient)
   159  		assert.EqualError(t, err, "HTTP PUT request to https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='Active') failed with error: : 401 Unauthorized")
   160  	})
   161  
   162  	t.Run("Failed case of Integration Flow Create Test", func(t *testing.T) {
   163  		filesMock := mock.FilesMock{}
   164  		path := filepath.Join("tempDir", "iflow4.zip")
   165  		filesMock.AddFile(path, []byte("dummy content"))
   166  		exists, err := filesMock.FileExists(path)
   167  		assert.NoError(t, err)
   168  		assert.True(t, exists)
   169  
   170  		apiServiceKey := `{
   171  			"oauth": {
   172  				"url": "https://demo",
   173  				"clientid": "demouser",
   174  				"clientsecret": "******",
   175  				"tokenurl": "https://demo/oauth/token"
   176  			}
   177  		}`
   178  		config := integrationArtifactUploadOptions{
   179  			APIServiceKey:       apiServiceKey,
   180  			IntegrationFlowName: "flow4",
   181  			IntegrationFlowID:   "flow4",
   182  			PackageID:           "CICD",
   183  			FilePath:            path,
   184  		}
   185  
   186  		httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "NegativeAndUpdateIntegrationDesigntimeArtifactResBody"}
   187  
   188  		err = runIntegrationArtifactUpload(&config, nil, &filesMock, &httpClient)
   189  		assert.EqualError(t, err, "HTTP POST request to https://demo/api/v1/IntegrationDesigntimeArtifacts failed with error: : 401 Unauthorized")
   190  	})
   191  }