Skip to content

Commit

Permalink
Add tests for @refetchable with FetchableType and Node interface
Browse files Browse the repository at this point in the history
Reviewed By: tyao1

Differential Revision: D58056841

fbshipit-source-id: 2ebf83695d28cf7a1908d3d43182abcb0ad6ff97
  • Loading branch information
alunyov authored and facebook-github-bot committed Jun 3, 2024
1 parent 6955ce6 commit 60f7009
Show file tree
Hide file tree
Showing 6 changed files with 344 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ pub async fn transform_fixture(fixture: &Fixture<'_>) -> Result<String, String>
enable_resolver_normalization_ast: fixture
.content
.contains("# enable_resolver_normalization_ast"),
prefer_fetchable_in_refetch_queries: fixture
.content
.contains("# prefer_fetchable_in_refetch_queries"),
..Default::default()
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
==================================== INPUT ====================================
fragment refetchableFragmentOnNodeAndFetchableNoFlag_RefetchableFragment on FetchableType
@refetchable(queryName: "RefetchableFragmentQuery") {
id
}
==================================== OUTPUT ===================================
{
"fragment": {
"argumentDefinitions": [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "id"
}
],
"kind": "Fragment",
"metadata": null,
"name": "RefetchableFragmentQuery",
"selections": [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "id",
"variableName": "id"
}
],
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"args": null,
"kind": "FragmentSpread",
"name": "refetchableFragmentOnNodeAndFetchableNoFlag_RefetchableFragment"
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "id"
}
],
"kind": "Operation",
"name": "RefetchableFragmentQuery",
"selections": [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "id",
"variableName": "id"
}
],
"concreteType": null,
"kind": "LinkedField",
"name": "node",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__typename",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "31dcd57f42128b8d975e6224202a17c9",
"id": null,
"metadata": {},
"name": "RefetchableFragmentQuery",
"operationKind": "query",
"text": null
}
}

QUERY:

query RefetchableFragmentQuery(
$id: ID!
) {
node(id: $id) {
__typename
...refetchableFragmentOnNodeAndFetchableNoFlag_RefetchableFragment
id
}
}

fragment refetchableFragmentOnNodeAndFetchableNoFlag_RefetchableFragment on FetchableType {
id
}


{
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": {
"refetch": {
"connection": null,
"fragmentPathInResult": [
"node"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableFragmentOnNodeAndFetchableNoFlag_RefetchableFragment",
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
}
],
"type": "FetchableType",
"abstractKey": null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
fragment refetchableFragmentOnNodeAndFetchableNoFlag_RefetchableFragment on FetchableType
@refetchable(queryName: "RefetchableFragmentQuery") {
id
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
==================================== INPUT ====================================
# prefer_fetchable_in_refetch_queries

fragment refetchableFragmentOnNodeAndFetchable_RefetchableFragment on FetchableType
@refetchable(queryName: "RefetchableFragmentQuery") {
id
}
==================================== OUTPUT ===================================
{
"fragment": {
"argumentDefinitions": [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "id"
}
],
"kind": "Fragment",
"metadata": null,
"name": "RefetchableFragmentQuery",
"selections": [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "fetch_id",
"variableName": "id"
}
],
"concreteType": "FetchableType",
"kind": "LinkedField",
"name": "fetch__FetchableType",
"plural": false,
"selections": [
{
"args": null,
"kind": "FragmentSpread",
"name": "refetchableFragmentOnNodeAndFetchable_RefetchableFragment"
}
],
"storageKey": null
}
],
"type": "Query",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [
{
"defaultValue": null,
"kind": "LocalArgument",
"name": "id"
}
],
"kind": "Operation",
"name": "RefetchableFragmentQuery",
"selections": [
{
"alias": null,
"args": [
{
"kind": "Variable",
"name": "fetch_id",
"variableName": "id"
}
],
"concreteType": "FetchableType",
"kind": "LinkedField",
"name": "fetch__FetchableType",
"plural": false,
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fetch_id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__token",
"storageKey": null
}
],
"storageKey": null
}
]
},
"params": {
"cacheID": "31dcd57f42128b8d975e6224202a17c9",
"id": null,
"metadata": {},
"name": "RefetchableFragmentQuery",
"operationKind": "query",
"text": null
}
}

QUERY:

query RefetchableFragmentQuery(
$id: ID!
) {
fetch__FetchableType(fetch_id: $id) {
...refetchableFragmentOnNodeAndFetchable_RefetchableFragment
id
}
}

fragment refetchableFragmentOnNodeAndFetchable_RefetchableFragment on FetchableType {
id
fetch_id
__token
}


{
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": {
"refetch": {
"connection": null,
"fragmentPathInResult": [
"fetch__FetchableType"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierInfo": {
"identifierField": "fetch_id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableFragmentOnNodeAndFetchable_RefetchableFragment",
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "fetch_id",
"storageKey": null
},
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "__token",
"storageKey": null
}
],
"type": "FetchableType",
"abstractKey": null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# prefer_fetchable_in_refetch_queries

fragment refetchableFragmentOnNodeAndFetchable_RefetchableFragment on FetchableType
@refetchable(queryName: "RefetchableFragmentQuery") {
id
}
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<<6e033bf9f4de04e01e1d80d1a31f42a1>>
* @generated SignedSource<<7cad3627ea64e85444c6afa470611bf7>>
*/

mod compile_relay_artifacts;
Expand Down Expand Up @@ -1118,6 +1118,20 @@ async fn refetchable_fragment_directives_invalid() {
test_fixture(transform_fixture, file!(), "refetchable_fragment_directives.invalid.graphql", "compile_relay_artifacts/fixtures/refetchable_fragment_directives.invalid.expected", input, expected).await;
}

#[tokio::test]
async fn refetchable_fragment_on_node_and_fetchable() {
let input = include_str!("compile_relay_artifacts/fixtures/refetchable-fragment-on-node-and-fetchable.graphql");
let expected = include_str!("compile_relay_artifacts/fixtures/refetchable-fragment-on-node-and-fetchable.expected");
test_fixture(transform_fixture, file!(), "refetchable-fragment-on-node-and-fetchable.graphql", "compile_relay_artifacts/fixtures/refetchable-fragment-on-node-and-fetchable.expected", input, expected).await;
}

#[tokio::test]
async fn refetchable_fragment_on_node_and_fetchable_no_flag() {
let input = include_str!("compile_relay_artifacts/fixtures/refetchable-fragment-on-node-and-fetchable-no-flag.graphql");
let expected = include_str!("compile_relay_artifacts/fixtures/refetchable-fragment-on-node-and-fetchable-no-flag.expected");
test_fixture(transform_fixture, file!(), "refetchable-fragment-on-node-and-fetchable-no-flag.graphql", "compile_relay_artifacts/fixtures/refetchable-fragment-on-node-and-fetchable-no-flag.expected", input, expected).await;
}

#[tokio::test]
async fn refetchable_fragment_on_node_with_missing_id() {
let input = include_str!("compile_relay_artifacts/fixtures/refetchable-fragment-on-node-with-missing-id.graphql");
Expand Down

0 comments on commit 60f7009

Please sign in to comment.