diff --git a/query.go b/query.go index 73ac4ad..ced1c78 100644 --- a/query.go +++ b/query.go @@ -63,7 +63,7 @@ func (g *GraphQL) Query(queryContent string, queryVariables interface{}, queryHe } httpRequest, err := http.NewRequest("POST", g.Endpoint, bytes.NewBuffer(query)) - httpRequest.Header.Add("Content-Type", "application/json") + //httpRequest.Header.Add("Content-Type", "application/json") for header, value := range queryHeaders { httpRequest.Header.Add(fmt.Sprintf("%v", header), fmt.Sprintf("%v", value)) } @@ -89,18 +89,18 @@ func (g *GraphQL) Query(queryContent string, queryVariables interface{}, queryHe } if !pandati.IsZero(queryResult.Errors) { - g.Log.Error("Query returned error", map[string]interface{}{"_query": queryContent, "_variables": queryVariables, "_error": fmt.Sprintf("%v", queryResult.Errors)}) + g.Log.Error("Query returned error", map[string]interface{}{"_query": queryContent, "_variables": queryVariables, "_error": fmt.Sprintf("%v", queryResult.Errors), "_response_code": httpResponse.StatusCode}) return "", fmt.Errorf("%v", queryResult.Errors[0].Message) } if pandati.IsZero(queryResult.Data) { - g.Log.Error("Query returned no data", map[string]interface{}{"_query": queryContent, "_variables": queryVariables}) + g.Log.Error("Query returned no data", map[string]interface{}{"_query": queryContent, "_variables": queryVariables, "_response_code": httpResponse.StatusCode}) return "", errors.New("Query returned no data") } responseContent, err = json.MarshalToString(queryResult.Data) if err != nil { - g.Log.Error("Invalid data result", map[string]interface{}{"_query": queryContent, "_variables": queryVariables, "_result": responseContent}) + g.Log.Error("Invalid data result", map[string]interface{}{"_query": queryContent, "_variables": queryVariables, "_result": responseContent, "_response_code": httpResponse.StatusCode}) return "", err } diff --git a/query_test.go b/query_test.go index 67eb628..8de2598 100644 --- a/query_test.go +++ b/query_test.go @@ -2,6 +2,7 @@ package gql import ( "fmt" + "os" "testing" "github.com/stretchr/testify/assert" @@ -59,6 +60,7 @@ func (suite *TestSuite) Test_GraphQL_Query() { type args struct { queryContent string queryVariables interface{} + queryHeaders map[string]interface{} } tests := []struct { name string @@ -151,6 +153,30 @@ func (suite *TestSuite) Test_GraphQL_Query() { wantResult: `{"available_packages":[{"package_discount":0,"package_name":"media_1000","package_price":750,"package_size":1000,"package_type":"media"},{"package_discount":5,"package_name":"media_5000","package_price":3563,"package_size":5000,"package_type":"media"},{"package_discount":10,"package_name":"media_10000","package_price":6750,"package_size":10000,"package_type":"media"},{"package_discount":15,"package_name":"media_25000","package_price":15938,"package_size":25000,"package_type":"media"},{"package_discount":0,"package_name":"voice_500","package_price":1000,"package_size":500,"package_type":"voice"},{"package_discount":10,"package_name":"voice_1000","package_price":1800,"package_size":1000,"package_type":"voice"},{"package_discount":15,"package_name":"voice_2500","package_price":4250,"package_size":2500,"package_type":"voice"}]}`, wantErr: false, }, + { + name: "Valid query to github endpoint", + endpoint: "https://api.github.com/graphql", + isLocal: false, + args: args{ + queryContent: `query { + repository(name: "semver-generator", owner: "lukaszraczylo", followRenames: true) { + releases(last: 2) { + nodes { + tag { + name + } + } + } + } + }`, + queryVariables: nil, + queryHeaders: map[string]interface{}{ + "Authorization": "Bearer " + os.Getenv("GITHUB_TOKEN"), + }, + }, + wantResult: `{"repository":{"releases":{"nodes":[`, + wantErr: false, + }, } for _, tt := range tests { suite.T().Run(tt.name, func(t *testing.T) { @@ -159,11 +185,11 @@ func (suite *TestSuite) Test_GraphQL_Query() { // } g.Endpoint = tt.endpoint g.Cache = tt.cache_enabled - gotResult, gotErr := g.Query(tt.args.queryContent, tt.args.queryVariables, nil) + gotResult, gotErr := g.Query(tt.args.queryContent, tt.args.queryVariables, tt.args.queryHeaders) if tt.wantErr { assert.Error(t, gotErr) } - assert.Equal(t, tt.wantResult, gotResult) + assert.Contains(t, gotResult, tt.wantResult) }) } fmt.Println(g.CacheStore.Capacity())