UNPKG

@graphql-hive/federation-gateway-audit

Version:
237 lines (222 loc) 3.58 kB
'use strict'; var testkit = require('./testkit-CAf-AsDy.cjs'); require('@apollo/composition'); require('graphql'); require('fets'); require('@apollo/subgraph'); require('graphql-yoga'); const products = [ { __typename: "Bread", id: "p1", name: "Bread" } ]; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@interfaceObject"] ) interface Node @key(fields: "id") { id: ID! } type Product @key(fields: "id", resolvable: false) @interfaceObject { id: ID! } type Query { a: Node product: Product! } ` ), resolvers: { Query: { a() { return { __typename: "Node", id: "n1" }; }, product() { return { __typename: "Product", id: products[0].id }; } }, Node: { __resolveReference() { throw new Error("Not resolvable as it is an interface object"); } } } }); var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@interfaceObject"] ) type Node @key(fields: "id", resolvable: false) @interfaceObject { id: ID! field: String } interface Product @key(fields: "id") { id: ID! } type Bread implements Product @key(fields: "id") { id: ID! name: String! } type Query { b: Node } ` ), resolvers: { Query: { b() { return { __typename: "Node", id: "n1" }; } }, Node: { __resolveReference() { throw new Error("Not resolvable"); }, field() { return "foo"; } }, Product: { __resolveReference(key) { return products.find((p) => p.id === key.id); } }, Bread: { __resolveReference(key) { return products.find((p) => p.id === key.id); } } } }); var test = [ testkit.createTest( /* GraphQL */ ` query { b { id field } } `, { data: { b: { id: "n1", field: "foo" } } } ), testkit.createTest( /* GraphQL */ ` query { a { field } } `, { data: null, errors: true } ), testkit.createTest( /* GraphQL */ ` query { b { id } } `, { data: { b: { id: "n1" } } } ), testkit.createTest( /* GraphQL */ ` query { a { id } } `, { data: { a: null }, errors: true } ), testkit.createTest( /* GraphQL */ ` query { product { id } } `, { data: { product: { id: "p1" } } } ), testkit.createTest( /* GraphQL */ ` query { product { id name } } `, { errors: true } ), testkit.createTest( /* GraphQL */ ` query { product { ... on Bread { id } } } `, { data: { product: { id: "p1" } } } ) ]; var index = testkit.serve("non-resolvable-interface-object", [a, b], test); exports.default = index;