From 3b34f7567f7eeaf9ad152b86273117293a6ced48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Fri, 28 Mar 2025 16:04:44 -0500 Subject: [PATCH 01/12] types: adds Result.ErrorsJoined method --- types.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/types.go b/types.go index 5b991d8c..80400013 100644 --- a/types.go +++ b/types.go @@ -1,6 +1,8 @@ package graphql import ( + "fmt" + "github.com/graphql-go/graphql/gqlerrors" ) @@ -17,3 +19,23 @@ type Result struct { func (r *Result) HasErrors() bool { return len(r.Errors) > 0 } + +// ErrorsJoined joins and returns the result errors. +func (r *Result) ErrorsJoined() error { + if r.Errors == nil { + return nil + } + + var result error + for _, err := range r.Errors { + if result == nil { + result = fmt.Errorf("%w", err) + + continue + } + + result = fmt.Errorf("%w: %w", err, result) + } + + return result +} From 2869fbb6be01a2d0224f7005ba5ed721f02e5d91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Fri, 28 Mar 2025 16:06:20 -0500 Subject: [PATCH 02/12] graphql_test: adds Result.ErrorsJoined 100& test coverage unit tests --- graphql_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/graphql_test.go b/graphql_test.go index 8b06a7b1..7f88ba96 100644 --- a/graphql_test.go +++ b/graphql_test.go @@ -2,10 +2,12 @@ package graphql_test import ( "context" + "errors" "reflect" "testing" "github.com/graphql-go/graphql" + "github.com/graphql-go/graphql/gqlerrors" "github.com/graphql-go/graphql/testutil" ) @@ -268,3 +270,32 @@ func TestEmptyStringIsNotNull(t *testing.T) { t.Errorf("wrong result, query: %v, graphql result diff: %v", query, testutil.Diff(expected, result)) } } + +func TestResultErrorsJoinedFailure(t *testing.T) { + r := graphql.Result{} + + if err := r.ErrorsJoined(); err != nil { + t.Fatalf("wrong result, want: nil, got: %v", err) + } +} + +func TestResultErrorsJoinedSuccess(t *testing.T) { + r := graphql.Result{ + Errors: []gqlerrors.FormattedError{ + {Message: "first error"}, + {Message: "second error"}, + }, + } + + expected := errors.New("second error: first error") + + if err := r.ErrorsJoined(); err != nil { + if !reflect.DeepEqual(err.Error(), expected.Error()) { + t.Fatalf("wrong result, want: %v, got: %v", expected, err) + } + + return + } + + t.Fatalf("wrong result, got: nil, want: %v", expected) +} From f4427f66801265d58bb9caf1beefff1e11ee4967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Fri, 28 Mar 2025 16:25:49 -0500 Subject: [PATCH 03/12] .circleci/config.yml: upgrades circleci go versions --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 608cb893..798b1d3c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -46,8 +46,8 @@ workflows: version: 2 build: jobs: - - golang:1.8.7 - - golang:1.9.7 - - golang:1.11 + - golang:1.13 + - golang:1.14 + - golang:1.15 - golang:latest - coveralls From 9bd0b679355748d5f7ff54088465d1787a6f492f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Fri, 28 Mar 2025 16:43:56 -0500 Subject: [PATCH 04/12] graphql_test: leverages errors.Is method --- graphql_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql_test.go b/graphql_test.go index 7f88ba96..248acfc9 100644 --- a/graphql_test.go +++ b/graphql_test.go @@ -290,7 +290,7 @@ func TestResultErrorsJoinedSuccess(t *testing.T) { expected := errors.New("second error: first error") if err := r.ErrorsJoined(); err != nil { - if !reflect.DeepEqual(err.Error(), expected.Error()) { + if errors.Is(err, expected) { t.Fatalf("wrong result, want: %v, got: %v", expected, err) } From b2f18a18c94cfa27266443991bdbc5033a5ffa77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Fri, 28 Mar 2025 16:56:40 -0500 Subject: [PATCH 05/12] types: improves code comments --- types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types.go b/types.go index 80400013..c4d89481 100644 --- a/types.go +++ b/types.go @@ -20,7 +20,7 @@ func (r *Result) HasErrors() bool { return len(r.Errors) > 0 } -// ErrorsJoined joins and returns the result errors. +// ErrorsJoined joins and returns the result errors with `:` as character separator. func (r *Result) ErrorsJoined() error { if r.Errors == nil { return nil From a2ac03c5da39465d6ba63da0611417c7de113b65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Mon, 31 Mar 2025 12:53:33 -0500 Subject: [PATCH 06/12] types: updates ErrorsJoined code comment --- types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types.go b/types.go index c4d89481..176dfa67 100644 --- a/types.go +++ b/types.go @@ -20,7 +20,7 @@ func (r *Result) HasErrors() bool { return len(r.Errors) > 0 } -// ErrorsJoined joins and returns the result errors with `:` as character separator. +// ErrorsJoined joins and returns the errors of the result with `:` as character separator. func (r *Result) ErrorsJoined() error { if r.Errors == nil { return nil From 740fdb82d90617fdfcd239f9d2494fa474d0fa8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Mon, 31 Mar 2025 13:27:00 -0500 Subject: [PATCH 07/12] .circleci: updates golang jobs --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 798b1d3c..f3c233bf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,15 +20,15 @@ jobs: golang:1.8.7: <<: *test_without_go_modules docker: - - image: circleci/golang:1.8.7 + - image: circleci/golang:1.13 golang:1.9.7: <<: *test_without_go_modules docker: - - image: circleci/golang:1.9.7 + - image: circleci/golang:1.14 golang:1.11: <<: *defaults docker: - - image: circleci/golang:1.11 + - image: circleci/golang:1.15 golang:latest: <<: *defaults docker: From b89a7b879d19e157e6a315c85e04dce5fa4614c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Mon, 31 Mar 2025 13:40:32 -0500 Subject: [PATCH 08/12] .circleci: updates go docker images --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f3c233bf..9483bbf4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,15 +20,15 @@ jobs: golang:1.8.7: <<: *test_without_go_modules docker: - - image: circleci/golang:1.13 + - image: cimg/go:1.13 golang:1.9.7: <<: *test_without_go_modules docker: - - image: circleci/golang:1.14 + - image: cimg/go:1.14 golang:1.11: <<: *defaults docker: - - image: circleci/golang:1.15 + - image: cimg/go:1.15 golang:latest: <<: *defaults docker: From 1449a32fdde09d130dad0b9a71614a5291b5f5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Mon, 31 Mar 2025 13:42:49 -0500 Subject: [PATCH 09/12] .circleci: updates jobs name --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9483bbf4..e0b0a138 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,15 +17,15 @@ defaults: &defaults version: 2 jobs: - golang:1.8.7: + golang:1.13: <<: *test_without_go_modules docker: - image: cimg/go:1.13 - golang:1.9.7: + golang:1.14: <<: *test_without_go_modules docker: - image: cimg/go:1.14 - golang:1.11: + golang:1.15: <<: *defaults docker: - image: cimg/go:1.15 From 4f36d79f91dfa160c604c9975e45ed9d37cecf6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Mon, 31 Mar 2025 14:23:51 -0500 Subject: [PATCH 10/12] .circleci: upgrades golang versions --- .circleci/config.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e0b0a138..d5b1f4e0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,18 +17,18 @@ defaults: &defaults version: 2 jobs: - golang:1.13: + golang:1.21: <<: *test_without_go_modules docker: - - image: cimg/go:1.13 - golang:1.14: + - image: cimg/go:1.21 + golang:1.22: <<: *test_without_go_modules docker: - - image: cimg/go:1.14 - golang:1.15: + - image: cimg/go:1.22 + golang:1.23: <<: *defaults docker: - - image: cimg/go:1.15 + - image: cimg/go:1.23 golang:latest: <<: *defaults docker: @@ -46,8 +46,8 @@ workflows: version: 2 build: jobs: - - golang:1.13 - - golang:1.14 - - golang:1.15 + - golang:1.21 + - golang:1.22 + - golang:1.23 - golang:latest - coveralls From 1af50a82b783fdd3ca606662216eff5241b0fed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Mon, 31 Mar 2025 16:45:45 -0500 Subject: [PATCH 11/12] .circleci: upgrades golang versions --- .circleci/config.yml | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d5b1f4e0..d9b1e885 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,25 +17,17 @@ defaults: &defaults version: 2 jobs: - golang:1.21: - <<: *test_without_go_modules - docker: - - image: cimg/go:1.21 - golang:1.22: - <<: *test_without_go_modules - docker: - - image: cimg/go:1.22 golang:1.23: <<: *defaults docker: - image: cimg/go:1.23 - golang:latest: + golang:1.24.1: <<: *defaults docker: - - image: circleci/golang:latest + - image: cimg/go:1.24.1 coveralls: docker: - - image: circleci/golang:latest + - image: cimg/go:1.24.1 steps: - checkout - run: go get github.com/mattn/goveralls @@ -46,8 +38,6 @@ workflows: version: 2 build: jobs: - - golang:1.21 - - golang:1.22 - golang:1.23 - - golang:latest + - golang:1.24.1 - coveralls From fac9bd6f6e3364861f491a7b7cd56d599143f278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Ram=C3=B3n?= Date: Mon, 31 Mar 2025 16:55:29 -0500 Subject: [PATCH 12/12] .circleci: updates coveralls image --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d9b1e885..2dbc68e8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,7 +27,7 @@ jobs: - image: cimg/go:1.24.1 coveralls: docker: - - image: cimg/go:1.24.1 + - image: circleci/golang:1.23 steps: - checkout - run: go get github.com/mattn/goveralls