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

     1  package graphql
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestHTTPHeaders_UnmarshalGQL(t *testing.T) {
    12  	for name, tc := range map[string]struct {
    13  		input    interface{}
    14  		err      bool
    15  		errmsg   string
    16  		expected HTTPHeaders
    17  	}{
    18  		//given
    19  		"correct input": {
    20  			input:    map[string][]string{"header1": {"val1", "val2"}},
    21  			err:      false,
    22  			expected: HTTPHeaders{"header1": []string{"val1", "val2"}},
    23  		},
    24  		"error: input is nil": {
    25  			input:  nil,
    26  			err:    true,
    27  			errmsg: "Invalid data [reason=input should not be nil]",
    28  		},
    29  		"error: invalid input": {
    30  			input:  "invalid headers",
    31  			err:    true,
    32  			errmsg: "unexpected input type: string, should be map[string][]string",
    33  		},
    34  	} {
    35  		t.Run(name, func(t *testing.T) {
    36  			// WHEN
    37  			h := HTTPHeaders{}
    38  			err := h.UnmarshalGQL(tc.input)
    39  
    40  			// THEN
    41  			if tc.err {
    42  				assert.Error(t, err)
    43  				assert.EqualError(t, err, tc.errmsg)
    44  				assert.Empty(t, h)
    45  			} else {
    46  				assert.NoError(t, err)
    47  				assert.Equal(t, tc.expected, h)
    48  			}
    49  		})
    50  	}
    51  }
    52  
    53  func TestHTTPHeaders_MarshalGQL(t *testing.T) {
    54  	//given
    55  	fixHeaders := HTTPHeaders{
    56  		"header": []string{"val1", "val2"},
    57  	}
    58  	expectedHeaders := `{"header":["val1","val2"]}`
    59  	buf := bytes.Buffer{}
    60  
    61  	// WHEN
    62  	fixHeaders.MarshalGQL(&buf)
    63  
    64  	// THEN
    65  	assert.NotNil(t, buf)
    66  	assert.Equal(t, expectedHeaders, buf.String())
    67  }
    68  
    69  func Test_NewHTTPHeadersSerialized(t *testing.T) {
    70  	t.Run("Success when invoking NewHTTPHeadersSerialized", func(t *testing.T) {
    71  		// GIVEN
    72  		expected := HTTPHeadersSerialized("{\"header1\":[\"val1\",\"val2\"]}")
    73  		given := map[string][]string{"header1": []string{"val1", "val2"}}
    74  
    75  		// WHEN
    76  		marshaled, err := NewHTTPHeadersSerialized(given)
    77  
    78  		// THEN
    79  		require.NoError(t, err)
    80  		require.Equal(t, expected, marshaled)
    81  	})
    82  }
    83  
    84  func Test_HTTPHeadersSerializedUnmarshal(t *testing.T) {
    85  	t.Run("Success when unmarshaling serialized HTTPHeaders", func(t *testing.T) {
    86  		// GIVEN
    87  		expected := map[string][]string{"header1": []string{"val1", "val2"}}
    88  		marshaled := HTTPHeadersSerialized("{\"header1\":[\"val1\",\"val2\"]}")
    89  
    90  		// WHEN
    91  		headers, err := marshaled.Unmarshal()
    92  
    93  		// THEN
    94  		require.NoError(t, err)
    95  		require.Equal(t, expected, headers)
    96  	})
    97  }