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 }