@@ -29,7 +29,7 @@ describe("connect spec and join__directive", () => {
2929 const expectedSupergraphSdl = `schema
3030 @link(url: "https://specs.apollo.dev/link/v1.0")
3131 @link(url: "https://specs.apollo.dev/join/v0.5", for: EXECUTION)
32- @link(url: "https://specs.apollo.dev/connect/v0.4 ", for: EXECUTION)
32+ @link(url: "https://specs.apollo.dev/connect/v0.3 ", for: EXECUTION)
3333 @join__directive(graphs: [WITH_CONNECTORS], name: "link", args: {url: "https://specs.apollo.dev/connect/v0.1", import: ["@connect", "@source"]})
3434 @join__directive(graphs: [WITH_CONNECTORS], name: "source", args: {name: "v1", http: {baseURL: "http://v1"}})
3535{
@@ -240,7 +240,7 @@ type Resource
240240 "schema
241241 @link(url: \\"https://specs.apollo.dev/link/v1.0\\")
242242 @link(url: \\"https://specs.apollo.dev/join/v0.5\\", for: EXECUTION)
243- @link(url: \\"https://specs.apollo.dev/connect/v0.4 \\", for: EXECUTION)
243+ @link(url: \\"https://specs.apollo.dev/connect/v0.3 \\", for: EXECUTION)
244244 @join__directive(graphs: [WITH_CONNECTORS], name: \\"link\\", args: {url: \\"https://specs.apollo.dev/connect/v0.1\\", import: [\\"@source\\"]})
245245 @join__directive(graphs: [WITH_CONNECTORS], name: \\"source\\", args: {name: \\"v1\\", http: {baseURL: \\"http://v1\\"}})
246246 {
@@ -459,7 +459,7 @@ type Resource
459459 "schema
460460 @link(url: \\"https://specs.apollo.dev/link/v1.0\\")
461461 @link(url: \\"https://specs.apollo.dev/join/v0.5\\", for: EXECUTION)
462- @link(url: \\"https://specs.apollo.dev/connect/v0.4 \\", for: EXECUTION)
462+ @link(url: \\"https://specs.apollo.dev/connect/v0.3 \\", for: EXECUTION)
463463 @join__directive(graphs: [WITH_CONNECTORS_V0_1_], name: \\"link\\", args: {url: \\"https://specs.apollo.dev/connect/v0.1\\", import: [\\"@connect\\", \\"@source\\"]})
464464 @join__directive(graphs: [WITH_CONNECTORS_V0_2_], name: \\"link\\", args: {url: \\"https://specs.apollo.dev/connect/v0.2\\", import: [\\"@connect\\", \\"@source\\"]})
465465 @join__directive(graphs: [WITH_CONNECTORS_V0_1_], name: \\"source\\", args: {name: \\"v1\\", http: {baseURL: \\"http://v1\\"}})
@@ -643,7 +643,7 @@ type Resource
643643 "schema
644644 @link(url: \\"https://specs.apollo.dev/link/v1.0\\")
645645 @link(url: \\"https://specs.apollo.dev/join/v0.5\\", for: EXECUTION)
646- @link(url: \\"https://specs.apollo.dev/connect/v0.4 \\", for: EXECUTION)
646+ @link(url: \\"https://specs.apollo.dev/connect/v0.3 \\", for: EXECUTION)
647647 @join__directive(graphs: [WITH_CONNECTORS_V0_1_], name: \\"link\\", args: {url: \\"https://specs.apollo.dev/connect/v0.1\\", import: [\\"@connect\\", \\"@source\\"]})
648648 @join__directive(graphs: [WITH_CONNECTORS_V0_3_], name: \\"link\\", args: {url: \\"https://specs.apollo.dev/connect/v0.3\\", import: [\\"@connect\\", \\"@source\\"]})
649649 @join__directive(graphs: [WITH_CONNECTORS_V0_1_], name: \\"source\\", args: {name: \\"v1\\", http: {baseURL: \\"http://v1\\"}})
@@ -744,6 +744,81 @@ type Resource
744744 }
745745 } ) ;
746746
747+ it ( "uses v0.4 in supergraph @link when a subgraph explicitly links to v0.4" , ( ) => {
748+ const subgraphs = [
749+ {
750+ name : "with-connectors-v0_4" ,
751+ typeDefs : parse ( `
752+ extend schema
753+ @link(
754+ url: "https://specs.apollo.dev/federation/v2.13"
755+ import: ["@key"]
756+ )
757+ @link(
758+ url: "https://specs.apollo.dev/connect/v0.4"
759+ import: ["@connect", "@source"]
760+ )
761+ @source(name: "v1", http: { baseURL: "http://v1" })
762+
763+ type Query {
764+ resources: [Resource!]!
765+ @connect(source: "v1", http: { GET: "/resources" }, selection: "")
766+ }
767+
768+ type Resource @key(fields: "id") {
769+ id: ID!
770+ name: String!
771+ }
772+ ` ) ,
773+ } ,
774+ ] ;
775+
776+ const result = composeServices ( subgraphs ) ;
777+ expect ( result . errors ?? [ ] ) . toEqual ( [ ] ) ;
778+ const printed = printSchema ( result . schema ! ) ;
779+ expect ( printed ) . toContain (
780+ '@link(url: "https://specs.apollo.dev/connect/v0.4", for: EXECUTION)'
781+ ) ;
782+ } ) ;
783+
784+ it ( "uses v0.3 (not v0.4) in supergraph @link when subgraphs only use v0.3 and earlier" , ( ) => {
785+ const subgraphs = [
786+ {
787+ name : "with-connectors-v0_3" ,
788+ typeDefs : parse ( `
789+ extend schema
790+ @link(
791+ url: "https://specs.apollo.dev/federation/v2.12"
792+ import: ["@key"]
793+ )
794+ @link(
795+ url: "https://specs.apollo.dev/connect/v0.3"
796+ import: ["@connect", "@source"]
797+ )
798+ @source(name: "v1", http: { baseURL: "http://v1" })
799+
800+ type Query {
801+ resources: [Resource!]!
802+ @connect(source: "v1", http: { GET: "/resources" }, selection: "")
803+ }
804+
805+ type Resource @key(fields: "id") {
806+ id: ID!
807+ name: String!
808+ }
809+ ` ) ,
810+ } ,
811+ ] ;
812+
813+ const result = composeServices ( subgraphs ) ;
814+ expect ( result . errors ?? [ ] ) . toEqual ( [ ] ) ;
815+ const printed = printSchema ( result . schema ! ) ;
816+ expect ( printed ) . toContain (
817+ '@link(url: "https://specs.apollo.dev/connect/v0.3", for: EXECUTION)'
818+ ) ;
819+ expect ( printed ) . not . toContain ( 'connect/v0.4' ) ;
820+ } ) ;
821+
747822 it ( "composes with renames" , ( ) => {
748823 const subgraphs = [
749824 {
@@ -784,7 +859,7 @@ type Resource
784859 "schema
785860 @link(url: \\"https://specs.apollo.dev/link/v1.0\\")
786861 @link(url: \\"https://specs.apollo.dev/join/v0.5\\", for: EXECUTION)
787- @link(url: \\"https://specs.apollo.dev/connect/v0.4 \\", for: EXECUTION)
862+ @link(url: \\"https://specs.apollo.dev/connect/v0.3 \\", for: EXECUTION)
788863 @join__directive(graphs: [WITH_CONNECTORS], name: \\"link\\", args: {url: \\"https://specs.apollo.dev/connect/v0.1\\", as: \\"http\\", import: [{name: \\"@connect\\", as: \\"@http\\"}, {name: \\"@source\\", as: \\"@api\\"}]})
789864 @join__directive(graphs: [WITH_CONNECTORS], name: \\"api\\", args: {name: \\"v1\\", http: {baseURL: \\"http://v1\\"}})
790865 {
0 commit comments