@@ -248,6 +248,120 @@ testImplementations((api) => {
248248 ` ) ;
249249 } ) ;
250250
251+ test ( `extend type causes additional @join__type(extension: true)` , ( ) => {
252+ const result = composeServices ( [
253+ {
254+ name : "a" ,
255+ typeDefs : parse ( /* GraphQL */ `
256+ extend schema
257+ @link(url: "https://specs.apollo.dev/link/v1.0")
258+ @link(
259+ url: "https://specs.apollo.dev/federation/v2.3"
260+ import: ["@key"]
261+ )
262+
263+ type Query {
264+ a: String
265+ }
266+
267+ type MediaReference @key(fields: "assetId") {
268+ assetId: String!
269+ }
270+ ` ) ,
271+ } ,
272+ {
273+ name : "b" ,
274+ typeDefs : parse ( /* GraphQL */ `
275+ extend schema
276+ @link(url: "https://specs.apollo.dev/link/v1.0")
277+ @link(
278+ url: "https://specs.apollo.dev/federation/v2.3"
279+ import: ["@key"]
280+ )
281+
282+ type Query {
283+ b: String
284+ }
285+
286+ type MediaReference @key(fields: "assetId") {
287+ assetId: String!
288+ }
289+ extend type MediaReference @key(fields: "assetId") {
290+ media: String
291+ }
292+ ` ) ,
293+ } ,
294+ ] ) ;
295+
296+ expect ( result . errors ) . toEqual ( undefined ) ;
297+ expect ( result . supergraphSdl ) . toContain (
298+ `@join__type(graph: B, key: "assetId", extension: true)` ,
299+ ) ;
300+ } ) ;
301+
302+ test ( `@join__field(external: true) missing because of ???` , ( ) => {
303+ let result = composeServices ( [
304+ {
305+ name : "a" ,
306+ typeDefs : parse ( /* GraphQL */ `
307+ extend schema
308+ @link(
309+ url: "https://specs.apollo.dev/federation/v2.3"
310+ import: [
311+ "@key"
312+ "@requires"
313+ "@external"
314+ "@shareable"
315+ "@extends"
316+ ]
317+ )
318+
319+ type Query {
320+ a: String
321+ }
322+
323+ type Order @extends @shareable @key(fields: "id") {
324+ id: ID! @external
325+ id2: ID @external
326+ orderProgress: String! @requires(fields: "id2")
327+ }
328+ ` ) ,
329+ } ,
330+ {
331+ name : "b" ,
332+ typeDefs : parse ( /* GraphQL */ `
333+ extend schema
334+ @link(
335+ url: "https://specs.apollo.dev/federation/v2.3"
336+ import: ["@key", "@shareable"]
337+ )
338+
339+ type Query {
340+ b: String
341+ }
342+
343+ type Order @key(fields: "id") @key(fields: "id2") @shareable {
344+ id: ID!
345+ id2: ID
346+ countryCode: String!
347+ }
348+ ` ) ,
349+ } ,
350+ ] ) ;
351+
352+ assertCompositionSuccess ( result ) ;
353+
354+ console . log ( result . supergraphSdl ) ;
355+
356+ const line = result . supergraphSdl
357+ . split ( "\n" )
358+ . find ( ( line ) => line . includes ( "id2: ID" ) ) ;
359+ const [ , remainder ] = line ! . split ( "id2: ID" ) ;
360+
361+ expect ( remainder ) . toContain ( "@join__field(graph: A, external: true)" ) ;
362+ expect ( remainder ) . toContain ( "@join__field(graph: B)" ) ;
363+ } ) ;
364+
251365 test ( "@join__field(external: true) when field is overridden" , ( ) => {
252366 let result = composeServices ( [
253367 {
@@ -7382,25 +7496,25 @@ testImplementations((api) => {
73827496 typeDefs : parse ( /* GraphQL */ `
73837497 extend schema
73847498 @link(
7385- url: "https://specs.apollo.dev/federation/v2.3"
7386- import: ["@key", "@shareable"]
7499+ url: "https://specs.apollo.dev/federation/v2.3"
7500+ import: ["@key", "@shareable"]
73877501 )
73887502 type Note @key(fields: "id") @shareable {
73897503 id: ID!
73907504 name: String
73917505 author: User
73927506 }
73937507 type User @key(fields: "id") {
7394- id: ID!
7395- name: String
7508+ id: ID!
7509+ name: String
73967510 }
7397- type PrivateNote @key(fields: "id") @shareable {
7398- id: ID!
7399- note: Note
7400- }
7401- type Query {
7402- note: Note @shareable
7403- privateNote: PrivateNote @shareable
7511+ type PrivateNote @key(fields: "id") @shareable {
7512+ id: ID!
7513+ note: Note
7514+ }
7515+ type Query {
7516+ note: Note @shareable
7517+ privateNote: PrivateNote @shareable
74047518 }
74057519 ` ) ,
74067520 } ,
@@ -7425,9 +7539,9 @@ testImplementations((api) => {
74257539 result = api . composeServices ( [
74267540 {
74277541 name : "foo" ,
7428- typeDefs : parse ( /* GraphQL */ `
7542+ typeDefs : parse ( /* GraphQL */ `
74297543 extend schema
7430- @link(
7544+ @link(
74317545 url: "https://specs.apollo.dev/federation/v2.3"
74327546 import: ["@key", "@external", "@provides", "@shareable"]
74337547 )
@@ -7442,8 +7556,8 @@ testImplementations((api) => {
74427556 type PrivateNote @key(fields: "id") @shareable {
74437557 id: ID!
74447558 note: Note @provides(fields: "name author { id }")
7445- }
7446- type Query {
7559+ }
7560+ type Query {
74477561 note: Note @shareable
74487562 privateNote: PrivateNote @shareable
74497563 }
@@ -7461,8 +7575,8 @@ testImplementations((api) => {
74617575 id: ID!
74627576 name: String
74637577 author: User
7464- }
7465- type User @key(fields: "id") {
7578+ }
7579+ type User @key(fields: "id") {
74667580 id: ID!
74677581 name: String
74687582 }
@@ -7490,7 +7604,7 @@ testImplementations((api) => {
74907604 type Note @key(fields: "id") @shareable {
74917605 id: ID!
74927606 tag: String
7493- }
7607+ }
74947608 ` ) ,
74957609 } ,
74967610 ] ) ;
@@ -7510,7 +7624,7 @@ testImplementations((api) => {
75107624 @join__field(external: true, graph: FOO)
75117625 @join__field(graph: BAR)
75127626 tag: String @join__field(graph: BAZ)
7513- }
7627+ }
75147628 ` ) ;
75157629 } ) ;
75167630
0 commit comments