Skip to content

Commit fbab7d6

Browse files
committed
Add test cases for @provides and @external
1 parent 02c0b41 commit fbab7d6

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

packages/plugins/typescript/resolvers/tests/ts-resolvers.federation.spec.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -366,12 +366,17 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
366366
367367
type Book {
368368
author: User @provides(fields: "name")
369+
editor: User @provides(fields: "company { taxCode }")
369370
}
370371
371372
type User @key(fields: "id") {
372373
id: ID!
373374
name: String @external
374375
username: String @external
376+
address: Address
377+
dateOfBirth: DateOfBirth
378+
placeOfBirth: PlaceOfBirth
379+
company: Company
375380
}
376381
377382
type Address {
@@ -389,6 +394,11 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
389394
city: String!
390395
country: String!
391396
}
397+
398+
type Company @external {
399+
name: String!
400+
taxCode: String!
401+
}
392402
`;
393403

394404
const content = await generate({
@@ -398,12 +408,13 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
398408
},
399409
});
400410

401-
// UserResolvers should not have a resolver function of name field
411+
// UserResolvers should not have `username` resolver because it is marked with `@external`
412+
// UserResolvers should have `name` resolver because whilst it is marked with `@external`, it is provided by `Book.author`
402413
expect(content).toBeSimilarStringTo(`
403414
export type UserResolvers<ContextType = any, ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User'], FederationType extends FederationTypes['User'] = FederationTypes['User']> = {
404415
__resolveReference?: ReferenceResolver<Maybe<ResolversTypes['User']>, { __typename: 'User' } & GraphQLRecursivePick<FederationType, {"id":true}>, ContextType>;
405-
id?: Resolver<ResolversTypes['ID'], { __typename: 'User' } & GraphQLRecursivePick<FederationType, {"id":true}>, ContextType>;
406-
name?: Resolver<Maybe<ResolversTypes['String']>, { __typename: 'User' } & GraphQLRecursivePick<FederationType, {"id":true}>, ContextType>;
416+
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
417+
name?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
407418
};
408419
`);
409420

@@ -414,6 +425,13 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
414425
};
415426
`);
416427

428+
// CompanyResolvers should only have taxCode resolver because it is part of the `@provides` directive in `Book.editor`
429+
expect(content).toBeSimilarStringTo(`
430+
export type CompanyResolvers<ContextType = any, ParentType extends ResolversParentTypes['Company'] = ResolversParentTypes['Company']> = {
431+
taxCode?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
432+
};
433+
`);
434+
417435
// DateOfBirthResolvers should not be generated because there is no field not marked with @external
418436
expect(content).not.toBeSimilarStringTo('export type DateOfBirthResolvers');
419437

0 commit comments

Comments
 (0)