Skip to content

Commit 41a33a1

Browse files
monicatangfacebook-github-bot
authored andcommitted
add regression tests for both field and fragment arguments in relay resolvers
Summary: ## Context When compiling relay resolvers we are missing validation on undefined global variables within resolvers. The global variables can be passed via resolver field or fragment arguments. We want to add a suite of regression tests for the following cases: - Relay resolver yields a scalar field without an associated fragment e.g. live or derived resolvers - Relay resolver yields a scalar field with an associated fragment - Passing both field and fragment arguments - Fragment args only - Field args only - Multiple undefined global variables - Linked field aka client edges ## This diff Adds the sad path version of this test: https://fburl.com/code/qal5u86k - Relay resolver yields a scalar field without an associated fragment e.g. live or derived resolvers - **Relay resolver yields a scalar field with an associated fragment** - **Passing both field and fragment arguments** - Fragment args only - Field args only - Multiple undefined global variables - Linked field aka client edges Add additional tests for relay resolvers to detect proper validation of their field and fragment arguments, which could be undefined Reviewed By: captbaritone Differential Revision: D50615537 fbshipit-source-id: 05b569d736419f4a71ce8656c7179d22420bafe4
1 parent 660f51f commit 41a33a1

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
==================================== INPUT ====================================
2+
# expected-to-throw
3+
4+
query relayResolverWithUndefinedFieldAndFragmentArgsQuery {
5+
node(id: "SOME_ID") {
6+
...relayResolverWithUndefinedFieldAndFragmentArgs_user
7+
}
8+
}
9+
10+
fragment relayResolverWithUndefinedFieldAndFragmentArgs_user on User {
11+
pop_star_name(field_arg: $undefined_field_arg, includeName: $undefined_fragment_arg)
12+
}
13+
14+
fragment relayResolverWithUndefinedFieldAndFragmentArgsFragment_name on User
15+
@argumentDefinitions(includeName: {type: "Boolean!"}) {
16+
__typename
17+
name @include(if: $includeName)
18+
}
19+
20+
# %extensions%
21+
22+
extend type User {
23+
pop_star_name(field_arg: Int, includeName: Boolean!): String @relay_resolver(fragment_name: "relayResolverWithUndefinedFieldAndFragmentArgsFragment_name", import_path: "PopStarNameResolver")
24+
}
25+
==================================== ERROR ====================================
26+
✖︎ Operation 'relayResolverWithUndefinedFieldAndFragmentArgsQuery' references undefined variable: '$undefined_fragment_arg'.
27+
28+
relay-resolver-with-undefined-field-and-fragment-args.invalid.graphql:10:63
29+
9 │ fragment relayResolverWithUndefinedFieldAndFragmentArgs_user on User {
30+
10 │ pop_star_name(field_arg: $undefined_field_arg, includeName: $undefined_fragment_arg)
31+
│ ^^^^^^^^^^^^^^^^^^^^^^^
32+
11 │ }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# expected-to-throw
2+
3+
query relayResolverWithUndefinedFieldAndFragmentArgsQuery {
4+
node(id: "SOME_ID") {
5+
...relayResolverWithUndefinedFieldAndFragmentArgs_user
6+
}
7+
}
8+
9+
fragment relayResolverWithUndefinedFieldAndFragmentArgs_user on User {
10+
pop_star_name(field_arg: $undefined_field_arg, includeName: $undefined_fragment_arg)
11+
}
12+
13+
fragment relayResolverWithUndefinedFieldAndFragmentArgsFragment_name on User
14+
@argumentDefinitions(includeName: {type: "Boolean!"}) {
15+
__typename
16+
name @include(if: $includeName)
17+
}
18+
19+
# %extensions%
20+
21+
extend type User {
22+
pop_star_name(field_arg: Int, includeName: Boolean!): String @relay_resolver(fragment_name: "relayResolverWithUndefinedFieldAndFragmentArgsFragment_name", import_path: "PopStarNameResolver")
23+
}

compiler/crates/relay-compiler/tests/compile_relay_artifacts_test.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<7743e2abb746815cdc1a8d9cd0257972>>
7+
* @generated SignedSource<<ed9fffdf93ab1c751f4503a67d68092e>>
88
*/
99

1010
mod compile_relay_artifacts;
@@ -1251,6 +1251,13 @@ async fn relay_resolver_with_spread_invalid() {
12511251
test_fixture(transform_fixture, "relay-resolver-with-spread.invalid.graphql", "compile_relay_artifacts/fixtures/relay-resolver-with-spread.invalid.expected", input, expected).await;
12521252
}
12531253

1254+
#[tokio::test]
1255+
async fn relay_resolver_with_undefined_field_and_fragment_args_invalid() {
1256+
let input = include_str!("compile_relay_artifacts/fixtures/relay-resolver-with-undefined-field-and-fragment-args.invalid.graphql");
1257+
let expected = include_str!("compile_relay_artifacts/fixtures/relay-resolver-with-undefined-field-and-fragment-args.invalid.expected");
1258+
test_fixture(transform_fixture, "relay-resolver-with-undefined-field-and-fragment-args.invalid.graphql", "compile_relay_artifacts/fixtures/relay-resolver-with-undefined-field-and-fragment-args.invalid.expected", input, expected).await;
1259+
}
1260+
12541261
#[tokio::test]
12551262
async fn relay_resolver_with_undefined_field_args_invalid() {
12561263
let input = include_str!("compile_relay_artifacts/fixtures/relay-resolver-with-undefined-field-args.invalid.graphql");

0 commit comments

Comments
 (0)