Skip to content

Commit 6610f72

Browse files
captbaritonefacebook-github-bot
authored andcommitted
Regression test for abstract root fragment
Differential Revision: D80984351
1 parent 55dff35 commit 6610f72

File tree

5 files changed

+502
-0
lines changed

5 files changed

+502
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/**
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @flow strict-local
8+
* @format
9+
* @oncall relay
10+
*/
11+
12+
'use strict';
13+
14+
import type {IEnvironment} from 'relay-runtime';
15+
16+
const React = require('react');
17+
const {RelayEnvironmentProvider, useLazyLoadQuery} = require('react-relay');
18+
const TestRenderer = require('react-test-renderer');
19+
const {graphql} = require('relay-runtime/query/GraphQLTag');
20+
const {createMockEnvironment} = require('relay-test-utils');
21+
const {
22+
disallowConsoleErrors,
23+
disallowWarnings,
24+
} = require('relay-test-utils-internal');
25+
26+
disallowWarnings();
27+
disallowConsoleErrors();
28+
29+
function EnvironmentWrapper({
30+
children,
31+
environment,
32+
}: {
33+
children: React.Node,
34+
environment: IEnvironment,
35+
}) {
36+
return (
37+
<RelayEnvironmentProvider environment={environment}>
38+
<React.Suspense fallback="Loading...">{children}</React.Suspense>
39+
</RelayEnvironmentProvider>
40+
);
41+
}
42+
43+
function NodeGreeting() {
44+
const data = useLazyLoadQuery(
45+
graphql`
46+
query RelayResolversAbstractTypeRootFragmentTestQuery {
47+
node(id: "4") {
48+
node_greeting
49+
}
50+
}
51+
`,
52+
{},
53+
);
54+
return data.node?.node_greeting;
55+
}
56+
57+
// https://github.com/facebook/relay/issues/4943#issuecomment-3221637018
58+
test('Can read a resolver with a rootFragment on an abstract type', async () => {
59+
const logEvents = [];
60+
const environment = createMockEnvironment({
61+
relayFieldLogger(event) {
62+
logEvents.push(event);
63+
},
64+
});
65+
let renderer;
66+
TestRenderer.act(() => {
67+
renderer = TestRenderer.create(
68+
<EnvironmentWrapper environment={environment}>
69+
<NodeGreeting />
70+
</EnvironmentWrapper>,
71+
);
72+
});
73+
expect(renderer?.toJSON()).toEqual('Loading...');
74+
expect(logEvents).toEqual([]);
75+
76+
await TestRenderer.act(() => {
77+
environment.mock.resolveMostRecentOperation({
78+
data: {
79+
node: {
80+
__typename: 'User',
81+
__isNode: 'User',
82+
id: '4',
83+
},
84+
},
85+
});
86+
jest.runAllImmediates();
87+
});
88+
89+
// Incorrect! We provided `__isNode`!
90+
expect(logEvents).toEqual([
91+
{
92+
fieldPath: '<abstract-type-hint>',
93+
kind: 'missing_expected_data.log',
94+
owner: 'NodeResolversGreeting',
95+
uiContext: undefined,
96+
},
97+
]);
98+
// Incorrect! Should be the greeting.
99+
expect(renderer?.toJSON()).toEqual(null);
100+
});

packages/react-relay/__tests__/__generated__/RelayResolversAbstractTypeRootFragmentTestQuery.graphql.js

Lines changed: 153 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)