package cmd import ( "io/ioutil" "os" "testing" "github.com/SAP/jenkins-library/pkg/apim" apimhttp "github.com/SAP/jenkins-library/pkg/apim" "github.com/SAP/jenkins-library/pkg/mock" "github.com/stretchr/testify/assert" ) func TestRunApiProviderUpload(t *testing.T) { t.Parallel() t.Run("API Provider upload succesfull test", func(t *testing.T) { file, tmpErr := ioutil.TempFile("", "test.json") if tmpErr != nil { t.FailNow() } defer os.RemoveAll(file.Name()) // clean up filesMock := mock.FilesMock{} filesMock.AddFile(file.Name(), []byte(apimhttp.GetServiceKey())) config := getDefaultOptionsForApiProvider() config.FilePath = file.Name() httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 201, ResponseBody: ``} apim := apim.Bundle{APIServiceKey: config.APIServiceKey, Client: httpClientMock} // test err := createApiProvider(&config, apim, filesMock.FileRead) // assert if assert.NoError(t, err) { t.Run("check url", func(t *testing.T) { assert.Equal(t, "/apiportal/api/1.0/Management.svc/APIProviders", httpClientMock.URL) }) t.Run("check method", func(t *testing.T) { assert.Equal(t, "POST", httpClientMock.Method) }) } }) t.Run("API Provider upload failed test", func(t *testing.T) { file, tmpErr := ioutil.TempFile("", "test.json") if tmpErr != nil { t.FailNow() } defer os.RemoveAll(file.Name()) // clean up filesMock := mock.FilesMock{} filesMock.AddFile(file.Name(), []byte(apimhttp.GetServiceKey())) config := getDefaultOptionsForApiProvider() config.FilePath = file.Name() httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 400} apim := apim.Bundle{APIServiceKey: config.APIServiceKey, Client: httpClientMock} // test err := createApiProvider(&config, apim, filesMock.FileRead) // assert assert.EqualError(t, err, "HTTP POST request to /apiportal/api/1.0/Management.svc/APIProviders failed with error: : Bad Request") }) t.Run("valid api provider payload test", func(t *testing.T) { apiProviderPayload := `{ "oauth": { "url": "https://demo", "clientid": "demouser", "clientsecret": "******", "tokenurl": "https://demo/oauth/token" } }` apimData := apim.Bundle{Payload: apiProviderPayload} assert.Equal(t, apimData.IsPayloadJSON(), true) }) t.Run("invalid api provider payload test", func(t *testing.T) { apiProviderPayload := `this is not json` apimData := apim.Bundle{Payload: apiProviderPayload} assert.Equal(t, apimData.IsPayloadJSON(), false) }) } func getDefaultOptionsForApiProvider() apiProviderUploadOptions { return apiProviderUploadOptions{ APIServiceKey: apimhttp.GetServiceKey(), FilePath: "test.json", } }