github.com/xgoffin/jenkins-library@v1.154.0/cmd/apiProxyUpload_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  func TestRunApiProxyUpload(t *testing.T) {
    12  	t.Parallel()
    13  
    14  	t.Run("Successfull Api Proxy Create Test", func(t *testing.T) {
    15  		filesMock := mock.FilesMock{}
    16  		path := filepath.Join("tempDir", "apiproxy.zip")
    17  		filesMock.AddFile(path, []byte("dummy content"))
    18  		exists, err := filesMock.FileExists(path)
    19  		if err != nil {
    20  			t.Fatal("Failed to create temporary file")
    21  		}
    22  		assert.True(t, exists)
    23  		apiServiceKey := `{
    24  			"oauth": {
    25  				"url": "https://demo",
    26  				"clientid": "demouser",
    27  				"clientsecret": "******",
    28  				"tokenurl": "https://demo/oauth/token"
    29  			}
    30  		}`
    31  
    32  		config := apiProxyUploadOptions{
    33  			APIServiceKey: apiServiceKey,
    34  			FilePath:      path,
    35  		}
    36  
    37  		httpClient := httpMockCpis{CPIFunction: "ApiProxyUpload", ResponseBody: ``, TestType: "ApiProxyUploadPositiveCase"}
    38  
    39  		err = runApiProxyUpload(&config, nil, &filesMock, &httpClient)
    40  
    41  		if assert.NoError(t, err) {
    42  
    43  			t.Run("check url", func(t *testing.T) {
    44  				assert.Equal(t, "https://demo/apiportal/api/1.0/Transport.svc/APIProxies", httpClient.URL)
    45  			})
    46  
    47  			t.Run("check method", func(t *testing.T) {
    48  				assert.Equal(t, "POST", httpClient.Method)
    49  			})
    50  		}
    51  	})
    52  
    53  	t.Run("Failed case of API Proxy Create Test", func(t *testing.T) {
    54  		filesMock := mock.FilesMock{}
    55  		path := filepath.Join("tempDir", "apiproxy.zip")
    56  		filesMock.AddFile(path, []byte("dummy content"))
    57  		exists, err := filesMock.FileExists(path)
    58  		assert.NoError(t, err)
    59  		assert.True(t, exists)
    60  		apiServiceKey := `{
    61  			"oauth": {
    62  				"url": "https://demo",
    63  				"clientid": "demouser",
    64  				"clientsecret": "******",
    65  				"tokenurl": "https://demo/oauth/token"
    66  			}
    67  		}`
    68  
    69  		config := apiProxyUploadOptions{
    70  			APIServiceKey: apiServiceKey,
    71  			FilePath:      path,
    72  		}
    73  
    74  		httpClient := httpMockCpis{CPIFunction: "ApiProxyArtifactFail", ResponseBody: ``, TestType: "NegativeApiProxyArtifactUploadResBody"}
    75  
    76  		uploadErr := runApiProxyUpload(&config, nil, &filesMock, &httpClient)
    77  		assert.EqualError(t, uploadErr, "HTTP POST request to https://demo/apiportal/api/1.0/Transport.svc/APIProxies failed with error: : Service not Found")
    78  	})
    79  
    80  	t.Run("file not exist", func(t *testing.T) {
    81  		filesMock := mock.FilesMock{}
    82  		apiServiceKey := `{
    83  			"oauth": {
    84  				"url": "https://demo",
    85  				"clientid": "demouser",
    86  				"clientsecret": "******",
    87  				"tokenurl": "https://demo/oauth/token"
    88  			}
    89  		}`
    90  
    91  		config := apiProxyUploadOptions{
    92  			APIServiceKey: apiServiceKey,
    93  			FilePath:      "",
    94  		}
    95  
    96  		httpClient := httpMockCpis{CPIFunction: "ApiProxyArtifactFail", ResponseBody: ``, TestType: "NegativeApiProxyArtifactUploadResBody"}
    97  
    98  		uploadErr := runApiProxyUpload(&config, nil, &filesMock, &httpClient)
    99  		assert.EqualError(t, uploadErr, "Error reading file: could not read ''")
   100  	})
   101  
   102  	t.Run("file not zip", func(t *testing.T) {
   103  		filesMock := mock.FilesMock{}
   104  		path := filepath.Join("tempDir", "apiproxy.pptx")
   105  		filesMock.AddFile(path, []byte("dummy content"))
   106  		apiServiceKey := `{
   107  			"oauth": {
   108  				"url": "https://demo",
   109  				"clientid": "demouser",
   110  				"clientsecret": "******",
   111  				"tokenurl": "https://demo/oauth/token"
   112  			}
   113  		}`
   114  
   115  		config := apiProxyUploadOptions{
   116  			APIServiceKey: apiServiceKey,
   117  			FilePath:      path,
   118  		}
   119  
   120  		httpClient := httpMockCpis{CPIFunction: "ApiProxyArtifactFail", ResponseBody: ``, TestType: "NegativeApiProxyArtifactUploadResBody"}
   121  
   122  		uploadErr := runApiProxyUpload(&config, nil, &filesMock, &httpClient)
   123  		assert.EqualError(t, uploadErr, "not valid zip archive")
   124  	})
   125  }