github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/http/error_transport_test.go (about)

     1  package http_test
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     7  	"net/http"
     8  	"testing"
     9  
    10  	httputil "github.com/kyma-incubator/compass/components/director/pkg/http"
    11  	"github.com/kyma-incubator/compass/components/director/pkg/http/httpfakes"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  func TestErrorHandlerTransport_RoundTripReturnsAnErrorOnBadRequest(t *testing.T) {
    16  	const failedResponseBody = "failBody"
    17  
    18  	transport := &httpfakes.FakeHTTPRoundTripper{}
    19  	transport.RoundTripReturns(&http.Response{
    20  		StatusCode: http.StatusBadRequest,
    21  		Body:       io.NopCloser(bytes.NewBufferString(failedResponseBody)),
    22  	}, nil)
    23  
    24  	errTransport := httputil.NewErrorHandlerTransport(transport)
    25  	resp, err := errTransport.RoundTrip(&http.Request{})
    26  
    27  	require.Nil(t, resp)
    28  	require.Error(t, err)
    29  	require.Contains(t, err.Error(), fmt.Sprintf("statusCode: %d Body: %s", http.StatusBadRequest, failedResponseBody))
    30  }
    31  
    32  func TestErrorHandlerTransport_RoundTripReturnsAValidResponseOnSuccessRequest(t *testing.T) {
    33  	transport := &httpfakes.FakeHTTPRoundTripper{}
    34  	transport.RoundTripReturns(&http.Response{
    35  		StatusCode: http.StatusOK,
    36  		Body:       io.NopCloser(&bytes.Buffer{}),
    37  	}, nil)
    38  
    39  	errTransport := httputil.NewErrorHandlerTransport(transport)
    40  	resp, err := errTransport.RoundTrip(&http.Request{})
    41  
    42  	require.NotNil(t, resp)
    43  	require.NoError(t, err)
    44  
    45  	bodyBytes, err := io.ReadAll(resp.Body)
    46  	require.NoError(t, err)
    47  
    48  	bodyString := string(bodyBytes)
    49  	require.Equal(t, http.StatusOK, resp.StatusCode)
    50  	require.Empty(t, bodyString)
    51  }