UNPKG

@graphql-hive/federation-gateway-audit

Version:
235 lines (221 loc) 3.52 kB
import { c as createSubgraph, a as createTest, s as serve } from './testkit-BtZjdl4n.js'; import '@apollo/composition'; import 'graphql'; import 'fets'; import '@apollo/subgraph'; import 'graphql-yoga'; const products = [ { __typename: "Bread", id: "p1", name: "Bread" } ]; var a = 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 = 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 = [ createTest( /* GraphQL */ ` query { b { id field } } `, { data: { b: { id: "n1", field: "foo" } } } ), createTest( /* GraphQL */ ` query { a { field } } `, { data: null, errors: true } ), createTest( /* GraphQL */ ` query { b { id } } `, { data: { b: { id: "n1" } } } ), createTest( /* GraphQL */ ` query { a { id } } `, { data: { a: null }, errors: true } ), createTest( /* GraphQL */ ` query { product { id } } `, { data: { product: { id: "p1" } } } ), createTest( /* GraphQL */ ` query { product { id name } } `, { errors: true } ), createTest( /* GraphQL */ ` query { product { ... on Bread { id } } } `, { data: { product: { id: "p1" } } } ) ]; var index = serve("non-resolvable-interface-object", [a, b], test); export { index as default };