UNPKG

@graphql-hive/federation-gateway-audit

Version:
276 lines (261 loc) 4.5 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 = [ { id: "u1", name: "u1-name" }, { id: "u2", name: "u2-name" }, { id: "u3", name: "u3-name" } ]; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@requires", "@external"] ) type User @key(fields: "id") { id: ID! name: String! @external aName: String! @requires(fields: "name") } type Query { userInA: User } ` ), resolvers: { Query: { userInA() { return users[0]; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } if ("name" in key) { return { id: user.id, name: user.name }; } return { id: user.id }; }, aName(user) { return `a__${user.name}`; }, name() { return "NEVER"; } } } }); var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@override"] ) type User @key(fields: "id") { id: ID! name: String! @override(from: "c") } type Query { userInB: User } ` ), resolvers: { Query: { userInB() { return users[1]; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, name: user.name }; } } } }); var c = testkit.createSubgraph("c", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@requires", "@external"] ) type User @key(fields: "id") { id: ID! name: String! @external cName: String! @requires(fields: "name") } type Query { userInC: User } ` ), resolvers: { Query: { userInC() { return users[2]; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } if ("name" in key) { return { id: user.id, name: user.name }; } return { id: user.id }; }, name() { return "NEVER"; }, cName(user) { return `c__${user.name}`; } } } }); var test = [ testkit.createTest( /* GraphQL */ ` { userInA { id name aName cName } userInB { id name aName cName } userInC { id name aName cName } } `, { data: { userInA: { id: "u1", name: "u1-name", aName: "a__u1-name", cName: "c__u1-name" }, userInB: { id: "u2", name: "u2-name", aName: "a__u2-name", cName: "c__u2-name" }, userInC: { id: "u3", name: "u3-name", aName: "a__u3-name", cName: "c__u3-name" } } } ), testkit.createTest( /* GraphQL */ ` query { userInC { cName } } `, { data: { userInC: { cName: "c__u3-name" } } } ), testkit.createTest( /* GraphQL */ ` query { userInA { cName } } `, { data: { userInA: { cName: "c__u1-name" } } } ), testkit.createTest( /* GraphQL */ ` query { userInA { aName } } `, { data: { userInA: { aName: "a__u1-name" } } } ) ]; var index = testkit.serve("override-with-requires", [a, b, c], test); exports.default = index;