github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/cmd/integrationArtifactTransport_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package cmd
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/SAP/jenkins-library/pkg/apim"
    11  	apimhttp "github.com/SAP/jenkins-library/pkg/apim"
    12  	"github.com/SAP/jenkins-library/pkg/mock"
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  type integrationArtifactTransportMockUtils struct {
    17  	*mock.ExecMockRunner
    18  	*mock.FilesMock
    19  }
    20  
    21  func newIntegrationArtifactTransportTestsUtils() integrationArtifactTransportMockUtils {
    22  	utils := integrationArtifactTransportMockUtils{
    23  		ExecMockRunner: &mock.ExecMockRunner{},
    24  		FilesMock:      &mock.FilesMock{},
    25  	}
    26  	return utils
    27  }
    28  
    29  func TestRunIntegrationArtifactTransport(t *testing.T) {
    30  	t.Parallel()
    31  
    32  	t.Run("Create Transport Request Successful test", func(t *testing.T) {
    33  		config := getDefaultOptionsForIntegrationArtifactTransport()
    34  		httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 202, ResponseBody: `{"processId": "100", "state": "FINISHED"}`}
    35  		apim := apim.Bundle{APIServiceKey: config.CasServiceKey, Client: httpClientMock}
    36  		// test
    37  		err := CreateIntegrationArtifactTransportRequest(&config, apim)
    38  		// assert
    39  		if assert.NoError(t, err) {
    40  			t.Run("check url", func(t *testing.T) {
    41  				assert.Equal(t, "/v1/operations/100", httpClientMock.URL)
    42  			})
    43  			t.Run("check method", func(t *testing.T) {
    44  				assert.Equal(t, "GET", httpClientMock.Method)
    45  			})
    46  		}
    47  	})
    48  
    49  	t.Run("getIntegrationTransportProcessingStatus successful test", func(t *testing.T) {
    50  		config := getDefaultOptionsForIntegrationArtifactTransport()
    51  		httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 200, ResponseBody: `{"state": "FINISHED"}`}
    52  		// test
    53  		resp, err := getIntegrationTransportProcessingStatus(&config, httpClientMock, "demo", "100")
    54  
    55  		// assert
    56  		assert.Equal(t, "FINISHED", resp)
    57  		assert.NoError(t, err)
    58  	})
    59  
    60  	t.Run("getIntegrationTransportError successful test", func(t *testing.T) {
    61  		config := getDefaultOptionsForIntegrationArtifactTransport()
    62  		httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 200, ResponseBody: `{ "logs": [] }`}
    63  		// test
    64  		resp, err := getIntegrationTransportError(&config, httpClientMock, "demo", "100")
    65  
    66  		// assert
    67  		assert.Equal(t, "{ \"logs\": [] }", resp)
    68  		// assert
    69  		if assert.NoError(t, err) {
    70  			t.Run("check url", func(t *testing.T) {
    71  				assert.Equal(t, "demo/v1/operations/100/logs", httpClientMock.URL)
    72  			})
    73  			t.Run("check method", func(t *testing.T) {
    74  				assert.Equal(t, "GET", httpClientMock.Method)
    75  			})
    76  		}
    77  	})
    78  
    79  	t.Run("GetCPITransportReqPayload successful test", func(t *testing.T) {
    80  		config := getDefaultOptionsForIntegrationArtifactTransport()
    81  		// test
    82  		resp, err := GetCPITransportReqPayload(&config)
    83  		fmt.Println(resp.String())
    84  		// assert
    85  		expJson := `{"contentType":"d9c3fe08ceeb47a2991e53049f2ed766","id":"TestTransport","name":"TestTransport","resourceID":"d9c3fe08ceeb47a2991e53049f2ed766","subType":"package","type":"CloudIntegration","version":"1.0"}`
    86  		actJson := resp.String()
    87  		assert.Contains(t, actJson, expJson)
    88  		assert.NoError(t, err)
    89  	})
    90  
    91  	t.Run("Create Transport Request negative test1", func(t *testing.T) {
    92  		config := getDefaultOptionsForIntegrationArtifactTransport()
    93  		httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 202, ResponseBody: `{"processId": ""}`}
    94  		apim := apim.Bundle{APIServiceKey: config.CasServiceKey, Client: httpClientMock}
    95  		// test
    96  		err := CreateIntegrationArtifactTransportRequest(&config, apim)
    97  		assert.Equal(t, "/v1/contentResources/export", httpClientMock.URL)
    98  		assert.Equal(t, "POST", httpClientMock.Method)
    99  		assert.Error(t, err)
   100  	})
   101  
   102  	t.Run("Create Transport Request negative test2", func(t *testing.T) {
   103  		config := getDefaultOptionsForIntegrationArtifactTransport()
   104  		httpClientMock := &apimhttp.HttpMockAPIM{StatusCode: 400, ResponseBody: ``}
   105  		apim := apim.Bundle{APIServiceKey: config.CasServiceKey, Client: httpClientMock}
   106  		// test
   107  		err := CreateIntegrationArtifactTransportRequest(&config, apim)
   108  		assert.EqualError(t, err, "HTTP POST request to /v1/contentResources/export failed with error: Bad Request")
   109  	})
   110  
   111  }
   112  
   113  func getDefaultOptionsForIntegrationArtifactTransport() integrationArtifactTransportOptions {
   114  
   115  	apiServiceKey := `{
   116  		"oauth": {
   117  			"url": "https://demo",
   118  			"clientid": "sb-2d0622c9",
   119  			"clientsecret": "edb5c506=",
   120  			"tokenurl": "https://demo/oauth/token"
   121  		}
   122  	}`
   123  
   124  	return integrationArtifactTransportOptions{
   125  		CasServiceKey:        apiServiceKey,
   126  		IntegrationPackageID: "TestTransport",
   127  		ResourceID:           "d9c3fe08ceeb47a2991e53049f2ed766",
   128  		Name:                 "TestTransport",
   129  		Version:              "1.0",
   130  	}
   131  }