Skip to content

Commit e9033b7

Browse files
authored
fix: correct comparison of variable values (#54)
1 parent 4f687f5 commit e9033b7

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/ast/ext.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ impl ValueExtension for Value {
325325
(Value::Object(a), Value::Object(b)) => {
326326
a.iter().zip(b.iter()).all(|(a, b)| a.1.compare(b.1))
327327
}
328+
(Value::Variable(a), Value::Variable(b)) => a.eq(b),
328329
_ => false,
329330
}
330331
}

src/validation/rules/overlapping_fields_can_be_merged.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,42 @@ fn identical_fields() {
941941
assert_eq!(get_messages(&errors).len(), 0);
942942
}
943943

944+
#[test]
945+
fn identical_fields_with_identical_variables() {
946+
use crate::validation::test_utils::*;
947+
948+
let mut plan = create_plan_from_rule(Box::new(OverlappingFieldsCanBeMerged::new()));
949+
let errors = test_operation_with_schema(
950+
r#"fragment mergeIdenticalFieldsWithIdenticalArgs on Dog {
951+
doesKnowCommand(dogCommand: $dogCommand)
952+
doesKnowCommand(dogCommand: $dogCommand)
953+
}"#,
954+
TEST_SCHEMA,
955+
&mut plan,
956+
);
957+
958+
assert_eq!(get_messages(&errors).len(), 0);
959+
}
960+
961+
#[test]
962+
fn identical_fields_with_different_variables() {
963+
use crate::validation::test_utils::*;
964+
965+
let mut plan = create_plan_from_rule(Box::new(OverlappingFieldsCanBeMerged::new()));
966+
let errors = test_operation_with_schema(
967+
r#"fragment mergeIdenticalFieldsWithIdenticalArgs on Dog {
968+
doesKnowCommand(dogCommand: $catCommand)
969+
doesKnowCommand(dogCommand: $dogCommand)
970+
}"#,
971+
TEST_SCHEMA,
972+
&mut plan,
973+
);
974+
975+
let messages = get_messages(&errors);
976+
assert_eq!(messages.len(), 1);
977+
assert_eq!(messages, vec!["Fields \"doesKnowCommand\" conflict because they have differing arguments. Use different aliases on the fields to fetch both if this was intentional."]);
978+
}
979+
944980
#[test]
945981
fn identical_fields_and_identical_args() {
946982
use crate::validation::test_utils::*;

0 commit comments

Comments
 (0)