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

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