github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/graphql/query_params_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 TestQueryParams_UnmarshalGQL(t *testing.T) { 12 for name, tc := range map[string]struct { 13 input interface{} 14 err bool 15 errmsg string 16 expected QueryParams 17 }{ 18 //given 19 "correct input": { 20 input: map[string][]string{"param1": {"val1", "val2"}}, 21 err: false, 22 expected: QueryParams{"param1": []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 params", 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 params := QueryParams{} 38 err := params.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, params) 45 } else { 46 assert.NoError(t, err) 47 assert.Equal(t, tc.expected, params) 48 } 49 }) 50 } 51 } 52 53 func TestQueryParams_MarshalGQL(t *testing.T) { 54 //given 55 fixParams := QueryParams{ 56 "param": []string{"val1", "val2"}, 57 } 58 expectedParams := `{"param":["val1","val2"]}` 59 buf := bytes.Buffer{} 60 61 // WHEN 62 fixParams.MarshalGQL(&buf) 63 64 // THEN 65 assert.NotNil(t, buf) 66 assert.Equal(t, expectedParams, buf.String()) 67 } 68 69 func Test_NewQueryParamsSerialized(t *testing.T) { 70 t.Run("Success when invoking NewQueryParamsSerialized", func(t *testing.T) { 71 // GIVEN 72 expected := QueryParamsSerialized("{\"param1\":[\"val1\",\"val2\"]}") 73 given := map[string][]string{"param1": []string{"val1", "val2"}} 74 75 // WHEN 76 marshaled, err := NewQueryParamsSerialized(given) 77 78 // THEN 79 require.NoError(t, err) 80 require.Equal(t, expected, marshaled) 81 }) 82 } 83 84 func Test_QueryParamsSerializedUnmarshal(t *testing.T) { 85 t.Run("Success when unmarshaling serialized QueryParams", func(t *testing.T) { 86 // GIVEN 87 expected := map[string][]string{"param1": []string{"val1", "val2"}} 88 marshaled := QueryParamsSerialized("{\"param1\":[\"val1\",\"val2\"]}") 89 90 // WHEN 91 params, err := marshaled.Unmarshal() 92 93 // THEN 94 require.NoError(t, err) 95 require.Equal(t, expected, params) 96 }) 97 }