Skip to content

Commit 08c32cf

Browse files
captbaritonefacebook-github-bot
authored andcommitted
Integration test for resolvers implementing fields for interface
Reviewed By: monicatang Differential Revision: D52916612 fbshipit-source-id: 0b2e52b5dc92bf9a4ce29a611bfa4c7232dc945c
1 parent 4e68155 commit 08c32cf

File tree

4 files changed

+414
-2
lines changed

4 files changed

+414
-2
lines changed

compiler/crates/graphql-test-helpers/src/project_fixture.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ impl ProjectFixture {
7373
fs::create_dir_all(dir).expect("Expected to create temp dir");
7474

7575
for (file_name, content) in &self.files {
76-
fs::write(dir.join(file_name), content).expect("Expected to write file");
76+
let file_path = dir.join(file_name);
77+
fs::create_dir_all(file_path.clone().parent().unwrap())
78+
.expect("Expected to create dir");
79+
fs::write(file_path, content).expect("Expected to write file");
7780
}
7881
}
7982

Lines changed: 356 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,356 @@
1+
==================================== INPUT ====================================
2+
//- PersonComponent.js
3+
graphql`fragment PersonComponentFragment on IPerson {
4+
name
5+
}`
6+
7+
//- UserTypeResolvers.js
8+
/**
9+
* @RelayResolver User implements IPerson
10+
*/
11+
12+
/**
13+
* @RelayResolver User.name: String
14+
*/
15+
16+
//- AdminTypeResolvers.js
17+
/**
18+
* @RelayResolver Admin implements IPerson
19+
*/
20+
21+
/**
22+
* @RelayResolver Admin.name: String
23+
*/
24+
25+
//- relay.config.json
26+
{
27+
"language": "flow",
28+
"jsModuleFormat": "haste",
29+
"schema": "schema.graphql",
30+
"schemaExtensions": [
31+
"schema-extensions"
32+
],
33+
"featureFlags": {
34+
"enable_relay_resolver_transform": true,
35+
"enable_resolver_normalization_ast": true,
36+
"relay_resolver_enable_interface_output_type": { "kind": "enabled" }
37+
}
38+
}
39+
40+
//- schema.graphql
41+
# Empty server schema
42+
43+
//- schema-extensions/extension.graphql
44+
interface IPerson {
45+
id: ID!
46+
name: String
47+
}
48+
==================================== OUTPUT ===================================
49+
//- __generated__/Admin____relay_model_instance.graphql.js
50+
/**
51+
* <auto-generated> SignedSource<<8461666cd2581b056dffb184d149c4ae>>
52+
* @flow
53+
* @lightSyntaxTransform
54+
* @nogrep
55+
*/
56+
57+
/* eslint-disable */
58+
59+
'use strict';
60+
61+
/*::
62+
import type { Fragment, ReaderFragment } from 'relay-runtime';
63+
import type { Admin__id$data } from "Admin__id.graphql";
64+
import type { FragmentType } from "relay-runtime";
65+
import {Admin as adminRelayModelInstanceResolverType} from "AdminTypeResolvers";
66+
// Type assertion validating that `adminRelayModelInstanceResolverType` resolver is correctly implemented.
67+
// A type error here indicates that the type signature of the resolver module is incorrect.
68+
(adminRelayModelInstanceResolverType: (
69+
id: Admin__id$data['id'],
70+
) => mixed);
71+
declare export opaque type Admin____relay_model_instance$fragmentType: FragmentType;
72+
export type Admin____relay_model_instance$data = {|
73+
+__relay_model_instance: ?ReturnType<typeof adminRelayModelInstanceResolverType>,
74+
+$fragmentType: Admin____relay_model_instance$fragmentType,
75+
|};
76+
export type Admin____relay_model_instance$key = {
77+
+$data?: Admin____relay_model_instance$data,
78+
+$fragmentSpreads: Admin____relay_model_instance$fragmentType,
79+
...
80+
};
81+
*/
82+
83+
var node/*: ReaderFragment*/ = {
84+
"argumentDefinitions": [],
85+
"kind": "Fragment",
86+
"metadata": null,
87+
"name": "Admin____relay_model_instance",
88+
"selections": [
89+
{
90+
"alias": null,
91+
"args": null,
92+
"fragment": {
93+
"args": null,
94+
"kind": "FragmentSpread",
95+
"name": "Admin__id"
96+
},
97+
"kind": "RelayResolver",
98+
"name": "__relay_model_instance",
99+
"resolverModule": require('relay-runtime/experimental').resolverDataInjector(require('Admin__id.graphql'), require('AdminTypeResolvers').Admin, 'id', true),
100+
"path": "__relay_model_instance"
101+
}
102+
],
103+
"type": "Admin",
104+
"abstractKey": null
105+
};
106+
107+
module.exports = ((node/*: any*/)/*: Fragment<
108+
Admin____relay_model_instance$fragmentType,
109+
Admin____relay_model_instance$data,
110+
>*/);
111+
112+
//- __generated__/Admin__id.graphql.js
113+
/**
114+
* <auto-generated> SignedSource<<29acfbf1d6f559b8b77e9cd1f35218c0>>
115+
* @flow
116+
* @lightSyntaxTransform
117+
* @nogrep
118+
*/
119+
120+
/* eslint-disable */
121+
122+
'use strict';
123+
124+
/*::
125+
import type { Fragment, ReaderFragment } from 'relay-runtime';
126+
import type { FragmentType } from "relay-runtime";
127+
declare export opaque type Admin__id$fragmentType: FragmentType;
128+
export type Admin__id$data = {|
129+
+id: string,
130+
+$fragmentType: Admin__id$fragmentType,
131+
|};
132+
export type Admin__id$key = {
133+
+$data?: Admin__id$data,
134+
+$fragmentSpreads: Admin__id$fragmentType,
135+
...
136+
};
137+
*/
138+
139+
var node/*: ReaderFragment*/ = {
140+
"argumentDefinitions": [],
141+
"kind": "Fragment",
142+
"metadata": null,
143+
"name": "Admin__id",
144+
"selections": [
145+
{
146+
"kind": "ClientExtension",
147+
"selections": [
148+
{
149+
"alias": null,
150+
"args": null,
151+
"kind": "ScalarField",
152+
"name": "id",
153+
"storageKey": null
154+
}
155+
]
156+
}
157+
],
158+
"type": "Admin",
159+
"abstractKey": null
160+
};
161+
162+
module.exports = ((node/*: any*/)/*: Fragment<
163+
Admin__id$fragmentType,
164+
Admin__id$data,
165+
>*/);
166+
167+
//- __generated__/PersonComponentFragment.graphql.js
168+
/**
169+
* <auto-generated> SignedSource<<0c7a40c7d7335bf20aeaf1274db556b1>>
170+
* @flow
171+
* @lightSyntaxTransform
172+
* @nogrep
173+
*/
174+
175+
/* eslint-disable */
176+
177+
'use strict';
178+
179+
/*::
180+
import type { Fragment, ReaderFragment } from 'relay-runtime';
181+
import type { FragmentType } from "relay-runtime";
182+
declare export opaque type PersonComponentFragment$fragmentType: FragmentType;
183+
export type PersonComponentFragment$data = {|
184+
+name: ?string,
185+
+$fragmentType: PersonComponentFragment$fragmentType,
186+
|};
187+
export type PersonComponentFragment$key = {
188+
+$data?: PersonComponentFragment$data,
189+
+$fragmentSpreads: PersonComponentFragment$fragmentType,
190+
...
191+
};
192+
*/
193+
194+
var node/*: ReaderFragment*/ = (function(){
195+
var v0 = [
196+
{
197+
"alias": null,
198+
"args": null,
199+
"kind": "ScalarField",
200+
"name": "name",
201+
"storageKey": null
202+
}
203+
];
204+
return {
205+
"argumentDefinitions": [],
206+
"kind": "Fragment",
207+
"metadata": null,
208+
"name": "PersonComponentFragment",
209+
"selections": [
210+
{
211+
"kind": "ClientExtension",
212+
"selections": [
213+
{
214+
"kind": "InlineFragment",
215+
"selections": (v0/*: any*/),
216+
"type": "Admin",
217+
"abstractKey": null
218+
},
219+
{
220+
"kind": "InlineFragment",
221+
"selections": (v0/*: any*/),
222+
"type": "User",
223+
"abstractKey": null
224+
}
225+
]
226+
}
227+
],
228+
"type": "IPerson",
229+
"abstractKey": "__isIPerson"
230+
};
231+
})();
232+
233+
(node/*: any*/).hash = "a57dd30bd59412781e9566e1553e2d70";
234+
235+
module.exports = ((node/*: any*/)/*: Fragment<
236+
PersonComponentFragment$fragmentType,
237+
PersonComponentFragment$data,
238+
>*/);
239+
240+
//- __generated__/User____relay_model_instance.graphql.js
241+
/**
242+
* <auto-generated> SignedSource<<94945c0964315b1c832485dc58b5ff38>>
243+
* @flow
244+
* @lightSyntaxTransform
245+
* @nogrep
246+
*/
247+
248+
/* eslint-disable */
249+
250+
'use strict';
251+
252+
/*::
253+
import type { Fragment, ReaderFragment } from 'relay-runtime';
254+
import type { User__id$data } from "User__id.graphql";
255+
import type { FragmentType } from "relay-runtime";
256+
import {User as userRelayModelInstanceResolverType} from "UserTypeResolvers";
257+
// Type assertion validating that `userRelayModelInstanceResolverType` resolver is correctly implemented.
258+
// A type error here indicates that the type signature of the resolver module is incorrect.
259+
(userRelayModelInstanceResolverType: (
260+
id: User__id$data['id'],
261+
) => mixed);
262+
declare export opaque type User____relay_model_instance$fragmentType: FragmentType;
263+
export type User____relay_model_instance$data = {|
264+
+__relay_model_instance: ?ReturnType<typeof userRelayModelInstanceResolverType>,
265+
+$fragmentType: User____relay_model_instance$fragmentType,
266+
|};
267+
export type User____relay_model_instance$key = {
268+
+$data?: User____relay_model_instance$data,
269+
+$fragmentSpreads: User____relay_model_instance$fragmentType,
270+
...
271+
};
272+
*/
273+
274+
var node/*: ReaderFragment*/ = {
275+
"argumentDefinitions": [],
276+
"kind": "Fragment",
277+
"metadata": null,
278+
"name": "User____relay_model_instance",
279+
"selections": [
280+
{
281+
"alias": null,
282+
"args": null,
283+
"fragment": {
284+
"args": null,
285+
"kind": "FragmentSpread",
286+
"name": "User__id"
287+
},
288+
"kind": "RelayResolver",
289+
"name": "__relay_model_instance",
290+
"resolverModule": require('relay-runtime/experimental').resolverDataInjector(require('User__id.graphql'), require('UserTypeResolvers').User, 'id', true),
291+
"path": "__relay_model_instance"
292+
}
293+
],
294+
"type": "User",
295+
"abstractKey": null
296+
};
297+
298+
module.exports = ((node/*: any*/)/*: Fragment<
299+
User____relay_model_instance$fragmentType,
300+
User____relay_model_instance$data,
301+
>*/);
302+
303+
//- __generated__/User__id.graphql.js
304+
/**
305+
* <auto-generated> SignedSource<<0a0f39eb34bfc882d28378a0b05b3c17>>
306+
* @flow
307+
* @lightSyntaxTransform
308+
* @nogrep
309+
*/
310+
311+
/* eslint-disable */
312+
313+
'use strict';
314+
315+
/*::
316+
import type { Fragment, ReaderFragment } from 'relay-runtime';
317+
import type { FragmentType } from "relay-runtime";
318+
declare export opaque type User__id$fragmentType: FragmentType;
319+
export type User__id$data = {|
320+
+id: string,
321+
+$fragmentType: User__id$fragmentType,
322+
|};
323+
export type User__id$key = {
324+
+$data?: User__id$data,
325+
+$fragmentSpreads: User__id$fragmentType,
326+
...
327+
};
328+
*/
329+
330+
var node/*: ReaderFragment*/ = {
331+
"argumentDefinitions": [],
332+
"kind": "Fragment",
333+
"metadata": null,
334+
"name": "User__id",
335+
"selections": [
336+
{
337+
"kind": "ClientExtension",
338+
"selections": [
339+
{
340+
"alias": null,
341+
"args": null,
342+
"kind": "ScalarField",
343+
"name": "id",
344+
"storageKey": null
345+
}
346+
]
347+
}
348+
],
349+
"type": "User",
350+
"abstractKey": null
351+
};
352+
353+
module.exports = ((node/*: any*/)/*: Fragment<
354+
User__id$fragmentType,
355+
User__id$data,
356+
>*/);

0 commit comments

Comments
 (0)