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

     1  package cmd
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/SAP/jenkins-library/pkg/apim"
     9  	apimhttp "github.com/SAP/jenkins-library/pkg/apim"
    10  	"github.com/SAP/jenkins-library/pkg/mock"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestRunApiProviderUpload(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	t.Run("API Provider upload succesfull test", func(t *testing.T) {
    18  		file, tmpErr := ioutil.TempFile("", "test.json")
    19  		if tmpErr != nil {
    20  			t.FailNow()
    21  		}
    22  		defer os.RemoveAll(file.Name()) // clean up
    23  		filesMock := mock.FilesMock{}
    24  		filesMock.AddFile(file.Name(), []byte(apimhttp.GetServiceKey()))
    25  		config := getDefaultOptionsForApiProvider()
    26  		config.FilePath = file.Name()
    27  		httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 201, ResponseBody: ``}
    28  		apim := apim.Bundle{APIServiceKey: config.APIServiceKey, Client: httpClientMock}
    29  		// test
    30  		err := createApiProvider(&config, apim, filesMock.FileRead)
    31  
    32  		// assert
    33  		if assert.NoError(t, err) {
    34  			t.Run("check url", func(t *testing.T) {
    35  				assert.Equal(t, "/apiportal/api/1.0/Management.svc/APIProviders", httpClientMock.URL)
    36  			})
    37  			t.Run("check method", func(t *testing.T) {
    38  				assert.Equal(t, "POST", httpClientMock.Method)
    39  			})
    40  		}
    41  	})
    42  
    43  	t.Run("API Provider upload failed test", func(t *testing.T) {
    44  		file, tmpErr := ioutil.TempFile("", "test.json")
    45  		if tmpErr != nil {
    46  			t.FailNow()
    47  		}
    48  		defer os.RemoveAll(file.Name()) // clean up
    49  		filesMock := mock.FilesMock{}
    50  		filesMock.AddFile(file.Name(), []byte(apimhttp.GetServiceKey()))
    51  		config := getDefaultOptionsForApiProvider()
    52  		config.FilePath = file.Name()
    53  		httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 400}
    54  		apim := apim.Bundle{APIServiceKey: config.APIServiceKey, Client: httpClientMock}
    55  		// test
    56  		err := createApiProvider(&config, apim, filesMock.FileRead)
    57  		// assert
    58  		assert.EqualError(t, err, "HTTP POST request to /apiportal/api/1.0/Management.svc/APIProviders failed with error: : Bad Request")
    59  	})
    60  
    61  	t.Run("valid api provider payload test", func(t *testing.T) {
    62  		apiProviderPayload := `{
    63  			"oauth": {
    64  				"url": "https://demo",
    65  				"clientid": "demouser",
    66  				"clientsecret": "******",
    67  				"tokenurl": "https://demo/oauth/token"
    68  				}
    69  			}`
    70  		apimData := apim.Bundle{Payload: apiProviderPayload}
    71  		assert.Equal(t, apimData.IsPayloadJSON(), true)
    72  	})
    73  
    74  	t.Run("invalid api provider payload test", func(t *testing.T) {
    75  		apiProviderPayload := `this is not json`
    76  		apimData := apim.Bundle{Payload: apiProviderPayload}
    77  		assert.Equal(t, apimData.IsPayloadJSON(), false)
    78  	})
    79  
    80  }
    81  
    82  func getDefaultOptionsForApiProvider() apiProviderUploadOptions {
    83  	return apiProviderUploadOptions{
    84  		APIServiceKey: apimhttp.GetServiceKey(),
    85  		FilePath:      "test.json",
    86  	}
    87  }