UNPKG

@graphql-hive/federation-gateway-audit

Version:
287 lines (270 loc) 4.88 kB
'use strict'; var testkit = require('./testkit-CAf-AsDy.cjs'); require('@apollo/composition'); require('graphql'); require('fets'); require('@apollo/subgraph'); require('graphql-yoga'); const users = [ { __typename: "Admin", id: "u1", name: "Alice", isMain: false }, { __typename: "Admin", id: "u2", name: "Bob", isMain: true } ]; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"]) type Query { union: Product interface: Node } union Product = Oven | Toaster interface Node { id: ID! } type Oven implements Node { id: ID! } type Toaster implements Node { id: ID! } interface User @key(fields: "id") { id: ID! } type Admin implements User @key(fields: "id") { id: ID! isMain: Boolean! } ` ), resolvers: { Query: { union() { return { id: "1", __typename: "Oven" }; }, interface() { return { id: "2", __typename: "Toaster" }; } }, User: { __resolveReference(key) { const user = users.find((user2) => user2.id === key.id); if (!user) { return null; } return { __typename: user.__typename, id: user.id }; } }, Admin: { __resolveReference(key) { const user = users.find((user2) => user2.id === key.id); if (!user) { return null; } return { __typename: user.__typename, id: user.id, isMain: user.isMain }; } } } }); var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@interfaceObject"] ) type Query { users: [User] } type User @key(fields: "id") @interfaceObject { id: ID! name: String! } ` ), resolvers: { Query: { users() { return users.map((user) => { return { // I deliberately return no __typename as it should not be resolved by the @interfaceObject id: user.id }; }); } }, User: { __resolveReference(key) { const user = users.find((user2) => user2.id === key.id); if (!user) { return null; } return { // I deliberately return no __typename as it should not be resolved by the @interfaceObject id: user.id }; }, name(user) { return users.find((u) => u.id === user.id)?.name; } } } }); var test = [ testkit.createTest( /* GraphQL */ ` query { union { __typename typename: __typename } } `, { data: { union: { __typename: "Oven", typename: "Oven" } } } ), testkit.createTest( /* GraphQL */ ` query { interface { id __typename typename: __typename t: __typename } } `, { data: { interface: { id: "2", __typename: "Toaster", typename: "Toaster", t: "Toaster" } } } ), testkit.createTest( /* GraphQL */ ` query { union { __typename ... on Oven { typename: __typename } ... on Toaster { typename: __typename } } } `, { data: { union: { __typename: "Oven", typename: "Oven" } } } ), testkit.createTest( /* GraphQL */ ` query { interface { __typename ... on Oven { typename: __typename } ... on Toaster { typename: __typename } } } `, { data: { interface: { __typename: "Toaster", typename: "Toaster" } } } ), testkit.createTest( /* GraphQL */ ` query { users { id } } `, { data: { users: [ { id: "u1" }, { id: "u2" } ] } } ), testkit.createTest( /* GraphQL */ ` query { users { __typename } } `, { data: { users: [ { __typename: "Admin" }, { __typename: "Admin" } ] } } ) ]; var index = testkit.serve("typename", [a, b], test); exports.default = index;