Skip to content

Commit

Permalink
Fix: argument comparison between two sets of args
Browse files Browse the repository at this point in the history
  • Loading branch information
jufemaiz committed Nov 12, 2021
1 parent 2a3d320 commit 24aed27
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 5 deletions.
12 changes: 7 additions & 5 deletions validator/rules/overlapping_fields_can_be_merged.go
Original file line number Diff line number Diff line change
Expand Up @@ -478,14 +478,16 @@ func sameArguments(args1 []*ast.Argument, args2 []*ast.Argument) bool {
return false
}
for _, arg1 := range args1 {
var matched bool
for _, arg2 := range args2 {
if arg1.Name != arg2.Name {
return false
}
if !sameValue(arg1.Value, arg2.Value) {
return false
if arg1.Name == arg2.Name && sameValue(arg1.Value, arg2.Value) {
matched = true
break
}
}
if !matched {
return false
}
}
return true
}
Expand Down
114 changes: 114 additions & 0 deletions validator/rules/overlapping_fields_can_be_merged_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package validator

import (
"testing"

"github.com/vektah/gqlparser/v2/ast"
)

func Test_sameArguments(t *testing.T) {
tests := map[string]struct {
args func() (args1, args2 []*ast.Argument)
result bool
}{
"both argument lists empty": {
args: func() (args1 []*ast.Argument, args2 []*ast.Argument) {
return nil, nil
},
result: true,
},
"args 1 empty, args 2 not": {
args: func() (args1 []*ast.Argument, args2 []*ast.Argument) {
return nil, []*ast.Argument{
{
Name: "thing",
Value: &ast.Value{Raw: "a thing"},
Position: &ast.Position{},
},
}
},
result: false,
},
"args 2 empty, args 1 not": {
args: func() (args1 []*ast.Argument, args2 []*ast.Argument) {
return []*ast.Argument{
{
Name: "thing",
Value: &ast.Value{Raw: "a thing"},
Position: &ast.Position{},
},
}, nil
},
result: false,
},
"args 1 mismatches args 2 names": {
args: func() (args1 []*ast.Argument, args2 []*ast.Argument) {
return []*ast.Argument{
{
Name: "thing1",
Value: &ast.Value{Raw: "1 thing"},
Position: &ast.Position{},
},
},
[]*ast.Argument{
{
Name: "thing2",
Value: &ast.Value{Raw: "2 thing"},
Position: &ast.Position{},
},
}
},
result: false,
},
"args 1 mismatches args 2 values": {
args: func() (args1 []*ast.Argument, args2 []*ast.Argument) {
return []*ast.Argument{
{
Name: "thing1",
Value: &ast.Value{Raw: "1 thing"},
Position: &ast.Position{},
},
},
[]*ast.Argument{
{
Name: "thing1",
Value: &ast.Value{Raw: "2 thing"},
Position: &ast.Position{},
},
}
},
result: false,
},
"args 1 matches args 2 names and values": {
args: func() (args1 []*ast.Argument, args2 []*ast.Argument) {
return []*ast.Argument{
{
Name: "thing1",
Value: &ast.Value{Raw: "1 thing"},
Position: &ast.Position{},
},
},
[]*ast.Argument{
{
Name: "thing1",
Value: &ast.Value{Raw: "1 thing"},
Position: &ast.Position{},
},
}
},
result: true,
},
}

for name, tc := range tests {
t.Run(name, func(t *testing.T) {
args1, args2 := tc.args()

resp := sameArguments(args1, args2)

if resp != tc.result {
t.Fatalf("Expected %t got %t", tc.result, resp)
}
})
}
}

0 comments on commit 24aed27

Please # to comment.