UNPKG

@graphql-hive/federation-gateway-audit

Version:
221 lines (208 loc) 4.36 kB
'use strict'; var testkit = require('./testkit-CAf-AsDy.cjs'); require('@apollo/composition'); require('graphql'); require('fets'); require('@apollo/subgraph'); require('graphql-yoga'); const books = [ { __typename: "Book", id: "1", upc: "b1", author: { __typename: "Author", id: "a1", name: "Alice" } }, { __typename: "Book", id: "2", upc: "b2", author: { __typename: "Author", id: "a2", name: "Bob" } }, { __typename: "Book", id: "3", upc: "b3", author: { __typename: "Author", id: "a3", name: "Jack" } } ]; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"]) type Query { bookContainers: [BookContainer] } type BookContainer { book: Book } type Book @key(fields: "upc") { upc: ID! } ` ), resolvers: { Query: { bookContainers() { return books.map((book) => ({ book: { upc: book.upc } })); } }, Book: { __resolveReference(reference) { if (reference != null) { let book = books.find((book2) => book2.upc === reference.upc); if (book != null && book.upc !== null) { return { __typename: "Book", upc: book.upc }; } } throw new Error("Invalid reference"); } } } }); var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"]) type Book @key(fields: "id") @key(fields: "upc") { id: ID! upc: ID! } ` ), resolvers: { Book: { __resolveReference(reference) { if (reference != null) { let book; if ("id" in reference) { book = books.find((book2) => book2.id === reference.id); } if ("upc" in reference) { book = books.find((book2) => book2.upc === reference.upc); } if (book != null) { if (book.id === "3") { return null; } return { __typename: "Book", id: book.id, upc: book.upc }; } } throw new Error("Invalid reference"); } } } }); var c = testkit.createSubgraph("c", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"]) type Book @key(fields: "id") { id: ID! author: Author } type Author { id: ID! name: String } ` ), resolvers: { Book: { __resolveReference(reference) { if (reference != null) { let book; if ("id" in reference && reference.id !== null) { book = books.find((book2) => book2.id === reference.id); } if ("upc" in reference && reference.upc !== null) { book = books.find((book2) => book2.upc === reference.upc); } if (book != null) { return { __typename: "Book", id: book.id, author: { __typename: "Author", id: book.author.id, name: book.author.name } }; } } throw new Error("Invalid reference"); } } } }); var test = [ testkit.createTest( /* GraphQL */ ` query { bookContainers { book { upc author { name } } } } `, { data: { bookContainers: [ { book: { upc: "b1", author: { name: "Alice" } } }, { book: { upc: "b2", author: { name: "Bob" } } }, { book: { upc: "b3", author: null } } ] } } ) ]; var index = testkit.serve("null-keys", [a, b, c], test); exports.default = index;