@@ -496,20 +496,46 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
496496 ` ) ;
497497 } ) ;
498498
499- it ( 'should skip to generate resolvers of fields with @external directive' , async ( ) => {
499+ it ( 'should skip to generate resolvers of fields or object types with @external directive' , async ( ) => {
500500 const federatedSchema = /* GraphQL */ `
501501 type Query {
502502 users: [User]
503503 }
504504
505505 type Book {
506506 author: User @provides(fields: "name")
507+ editor: User @provides(fields: "company { taxCode }")
507508 }
508509
509510 type User @key(fields: "id") {
510511 id: ID!
511512 name: String @external
512513 username: String @external
514+ address: Address
515+ dateOfBirth: DateOfBirth
516+ placeOfBirth: PlaceOfBirth
517+ company: Company
518+ }
519+
520+ type Address {
521+ street: String! @external
522+ zip: String!
523+ }
524+
525+ type DateOfBirth {
526+ day: Int! @external
527+ month: Int! @external
528+ year: Int! @external
529+ }
530+
531+ type PlaceOfBirth @external {
532+ city: String!
533+ country: String!
534+ }
535+
536+ type Company @external {
537+ name: String!
538+ taxCode: String!
513539 }
514540 ` ;
515541
@@ -520,7 +546,8 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
520546 } ,
521547 } ) ;
522548
523- // UserResolver should not have a resolver function of name field
549+ // UserResolvers should not have `username` resolver because it is marked with `@external`
550+ // UserResolvers should have `name` resolver because whilst it is marked with `@external`, it is provided by `Book.author`
524551 expect ( content ) . toBeSimilarStringTo ( `
525552 export type UserResolvers<ContextType = any, ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User'], FederationType extends FederationTypes['User'] = FederationTypes['User']> = {
526553 __resolveReference?: ReferenceResolver<Maybe<ResolversTypes['User']>,
@@ -530,6 +557,26 @@ describe('TypeScript Resolvers Plugin + Apollo Federation', () => {
530557 name?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
531558 };
532559 ` ) ;
560+
561+ // AddressResolvers should only have fields not marked with @external
562+ expect ( content ) . toBeSimilarStringTo ( `
563+ export type AddressResolvers<ContextType = any, ParentType extends ResolversParentTypes['Address'] = ResolversParentTypes['Address']> = {
564+ zip?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
565+ };
566+ ` ) ;
567+
568+ // CompanyResolvers should only have taxCode resolver because it is part of the `@provides` directive in `Book.editor`
569+ expect ( content ) . toBeSimilarStringTo ( `
570+ export type CompanyResolvers<ContextType = any, ParentType extends ResolversParentTypes['Company'] = ResolversParentTypes['Company']> = {
571+ taxCode?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
572+ };
573+ ` ) ;
574+
575+ // DateOfBirthResolvers should not be generated because there is no field not marked with @external
576+ expect ( content ) . not . toBeSimilarStringTo ( 'export type DateOfBirthResolvers' ) ;
577+
578+ // PlaceOfBirthResolvers should not be generated because the type is marked with @external
579+ expect ( content ) . not . toBeSimilarStringTo ( 'export type PlaceOfBirthResolvers' ) ;
533580 } ) ;
534581
535582 it ( 'should not include _FieldSet scalar' , async ( ) => {
0 commit comments