Skip to content

Commit

Permalink
add test that field args are dropped from scalar relay resolvers duri…
Browse files Browse the repository at this point in the history
…ng transform

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 check whether the relay_resolvers transform is dropping field arguments for relay resolvers without a fragment attached + returning a scalar value.

## This diff

Adds a test on the relay_resolvers transform to verify the above.

Add a test that field arguments are dropped from scalar relay resolvers during the `relay_resolvers` transform step and added to the `RelayResolverMetadata`.

Reviewed By: voideanvalue

Differential Revision: D50624879

fbshipit-source-id: bdce4180f79b409271100d5810bcc7b0c8523bc2
  • Loading branch information
monicatang authored and facebook-github-bot committed Oct 25, 2023
1 parent 1f69c0a commit 5c835e9
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
==================================== INPUT ====================================
fragment Foo_user on User {
pop_star_name(field_arg: 2)
}

# %extensions%

extend type User {
pop_star_name(field_arg: Int): String @relay_resolver(import_path: "PopStarNameResolver")
}
==================================== OUTPUT ===================================
fragment Foo_user on User {
__id @__RelayResolverMetadata
# RelayResolverMetadata {
# field_id: FieldID(516),
# import_path: "PopStarNameResolver",
# import_name: None,
# field_alias: None,
# field_path: "pop_star_name",
# field_arguments: [
# Argument {
# name: WithLocation {
# location: relay-resolver-scalar-field-arguments.graphql:44:53,
# item: ArgumentName(
# "field_arg",
# ),
# },
# value: WithLocation {
# location: relay-resolver-scalar-field-arguments.graphql:55:56,
# item: Constant(
# Int(
# 2,
# ),
# ),
# },
# },
# ],
# live: false,
# output_type_info: Legacy,
# fragment_data_injection_mode: None,
# }

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
fragment Foo_user on User {
pop_star_name(field_arg: 2)
}

# %extensions%

extend type User {
pop_star_name(field_arg: Int): String @relay_resolver(import_path: "PopStarNameResolver")
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<bc36b8794ed15edbcffd47c75921da9b>>
* @generated SignedSource<<3ea63a554f2b7b67c49487d1988ba0f3>>
*/

mod relay_resolvers;
Expand Down Expand Up @@ -103,6 +103,13 @@ async fn relay_resolver_required() {
test_fixture(transform_fixture, "relay-resolver-required.graphql", "relay_resolvers/fixtures/relay-resolver-required.expected", input, expected).await;
}

#[tokio::test]
async fn relay_resolver_scalar_field_arguments() {
let input = include_str!("relay_resolvers/fixtures/relay-resolver-scalar-field-arguments.graphql");
let expected = include_str!("relay_resolvers/fixtures/relay-resolver-scalar-field-arguments.expected");
test_fixture(transform_fixture, "relay-resolver-scalar-field-arguments.graphql", "relay_resolvers/fixtures/relay-resolver-scalar-field-arguments.expected", input, expected).await;
}

#[tokio::test]
async fn relay_resolver_with_global_vars_directive_invalid() {
let input = include_str!("relay_resolvers/fixtures/relay-resolver-with-global-vars-directive.invalid.graphql");
Expand Down

0 comments on commit 5c835e9

Please sign in to comment.