@@ -36,7 +36,12 @@ export type TReaderTestUser = {
36
36
name : ?string ,
37
37
} ;
38
38
39
- const modelMock = jest . fn ( ) ;
39
+ let modelMock ;
40
+ let nameMock ;
41
+ let bestFriendMock ;
42
+ let friendsMock ;
43
+ let user_oneMock ;
44
+
40
45
/**
41
46
* @RelayResolver RelayReaderExecResolversTestUser
42
47
*/
@@ -47,7 +52,6 @@ export function RelayReaderExecResolversTestUser(id: DataID): TReaderTestUser {
47
52
} ;
48
53
}
49
54
50
- const nameMock = jest . fn ( ) ;
51
55
/**
52
56
* @RelayResolver RelayReaderExecResolversTestUser.name: String
53
57
*/
@@ -56,7 +60,6 @@ export function name(user: TReaderTestUser): ?string {
56
60
return user . name ;
57
61
}
58
62
59
- const bestFriendMock = jest . fn ( ) ;
60
63
/**
61
64
* @RelayResolver RelayReaderExecResolversTestUser.best_friend: RelayReaderExecResolversTestUser
62
65
*/
@@ -67,7 +70,6 @@ export function best_friend(
67
70
return { id: '2' } ;
68
71
}
69
72
70
- const friendsMock = jest . fn ( ) ;
71
73
/**
72
74
* @RelayResolver RelayReaderExecResolversTestUser.friends: [RelayReaderExecResolversTestUser]
73
75
*/
@@ -78,7 +80,6 @@ export function friends(
78
80
return [ { id: '2' } , { id : '3' } , { id : '4' } ] ;
79
81
}
80
82
81
- const user_oneMock = jest . fn ( ) ;
82
83
/**
83
84
* @RelayResolver Query.RelayReaderExecResolversTest_user_one: RelayReaderExecResolversTestUser
84
85
*/
@@ -87,6 +88,14 @@ export function RelayReaderExecResolversTest_user_one(): IdOf<'RelayReaderExecRe
87
88
return { id: '1' } ;
88
89
}
89
90
91
+ beforeEach ( ( ) => {
92
+ modelMock = jest . fn ( ) ;
93
+ nameMock = jest . fn ( ) ;
94
+ bestFriendMock = jest . fn ( ) ;
95
+ friendsMock = jest . fn ( ) ;
96
+ user_oneMock = jest . fn ( ) ;
97
+ } ) ;
98
+
90
99
/**
91
100
* Note that the reading of exec time resolvers is expected to be the same as
92
101
* the reading of standard server queries. The main purpose of testing is to ensure
@@ -96,7 +105,7 @@ export function RelayReaderExecResolversTest_user_one(): IdOf<'RelayReaderExecRe
96
105
describe ( 'RelayReaderExecResolvers' , ( ) => {
97
106
it ( 'reads exec_time_resolvers without calling the resolvers when provider returns true' , ( ) => {
98
107
const Query = graphql `
99
- query RelayReaderExecResolversTestRunsQuery
108
+ query RelayReaderExecResolversTestQuery
100
109
@exec_time_resolvers(
101
110
enabledProvider: "relayReaderTestExecTimeResolversTrueProvider"
102
111
) {
@@ -157,7 +166,7 @@ describe('RelayReaderExecResolvers', () => {
157
166
158
167
it ( 'reads read time resolvers when exec time resolvers provider returns false' , ( ) => {
159
168
const Query = graphql `
160
- query RelayReaderExecResolversTestRunsNoProviderQuery
169
+ query RelayReaderExecResolversTestFalseProviderQuery
161
170
@exec_time_resolvers(
162
171
enabledProvider: "relayReaderTestExecTimeResolversFalseProvider"
163
172
) {
@@ -228,4 +237,65 @@ describe('RelayReaderExecResolvers', () => {
228
237
} ,
229
238
} ) ;
230
239
} ) ;
240
+
241
+ it ( 'reads exec time resolvers data correctly when client side directives are present, like @required' , ( ) => {
242
+ const Query = graphql `
243
+ query RelayReaderExecResolversTestClientDirectiveQuery
244
+ @exec_time_resolvers(
245
+ enabledProvider: "relayReaderTestExecTimeResolversTrueProvider"
246
+ ) {
247
+ RelayReaderExecResolversTest_user_one {
248
+ name @required(action: THROW)
249
+ best_friend {
250
+ name
251
+ }
252
+ friends {
253
+ name
254
+ }
255
+ }
256
+ }
257
+ ` ;
258
+ const operation = createOperationDescriptor ( Query , { } ) ;
259
+ const source = new RelayRecordSource ( {
260
+ 'client:root' : {
261
+ __id : 'client:root' ,
262
+ __typename : '__Root' ,
263
+ RelayReaderExecResolversTest_user_one : { __ref : '1' } ,
264
+ } ,
265
+ '1' : {
266
+ __id : '1' ,
267
+ name : 'Alice' ,
268
+ friends : { __refs : [ '2' , '3' , '4' ] } ,
269
+ } ,
270
+ '2' : {
271
+ __id : '2' ,
272
+ name : 'Bob' ,
273
+ } ,
274
+ '3' : {
275
+ __id : '3' ,
276
+ name : 'Claire' ,
277
+ } ,
278
+ '4' : {
279
+ __id : '4' ,
280
+ name : 'Dennis' ,
281
+ } ,
282
+ } ) ;
283
+ const resolverStore = new RelayModernStore ( source ) ;
284
+ const { data} = read (
285
+ source ,
286
+ operation . fragment ,
287
+ new LiveResolverCache ( ( ) => source , resolverStore ) ,
288
+ ) ;
289
+
290
+ expect ( modelMock ) . not . toBeCalled ( ) ;
291
+ expect ( nameMock ) . not . toBeCalled ( ) ;
292
+ expect ( user_oneMock ) . not . toBeCalled ( ) ;
293
+ expect ( friendsMock ) . not . toBeCalled ( ) ;
294
+ expect ( data ) . toEqual ( {
295
+ RelayReaderExecResolversTest_user_one : {
296
+ name : 'Alice' ,
297
+ friends : [ { name : 'Bob' } , { name : 'Claire' } , { name : 'Dennis' } ] ,
298
+ } ,
299
+ } ) ;
300
+ } ) ;
231
301
} ) ;
0 commit comments