UNPKG

@graphql-hive/federation-gateway-audit

Version:
508 lines (494 loc) 10.2 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" } ]; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@shareable"] ) type User { id: ID @shareable } type Query { users: [User!]! } ` ), resolvers: { Query: { users() { return users.map((u) => ({ __typename: "User", id: u.id })); } } } }); function accounts() { return [ ...users.map((user) => ({ __typename: "User", ...user })), { __typename: "Admin", id: "a1", name: "a1-name" } ]; } var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@shareable", "@key"] ) union Account = User | Admin type User @key(fields: "id") { id: ID! name: String similarAccounts: [Account!]! } type Admin { id: ID name: String @shareable similarAccounts: [Account!]! } type Query { accounts: [Account!]! } ` ), resolvers: { Query: { accounts }, User: { __resolveReference(key) { return users.find((user) => user.id === key.id); }, similarAccounts: accounts }, Admin: { similarAccounts: accounts } } }); var test = [ testkit.createTest( /* GraphQL */ ` { users { id name } accounts { ... on User { id name } ... on Admin { id name } } } `, { data: { users: [ { id: "u1", name: "u1-name" } ], accounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } } ), testkit.createTest( /* GraphQL */ ` query NestedInternalAlias { users { id name } accounts { ... on User { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } ... on Admin { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } } } `, { data: { users: [ { id: "u1", name: "u1-name" } ], accounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } ] } } ), testkit.createTest( /* GraphQL */ ` query DeeplyNestedInternalAlias { users { id name } accounts { ... on User { id name similarAccounts { ... on User { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } ... on Admin { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } } } ... on Admin { id name similarAccounts { ... on User { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } ... on Admin { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } } } } } `, { data: { users: [ { id: "u1", name: "u1-name" } ], accounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } ] } ] } } ), testkit.createTest( /* GraphQL */ ` query DeeplyNested { accounts { ... on User { name similarAccounts { ... on User { name similarAccounts { ... on User { name } ... on Admin { name } } } ... on Admin { name similarAccounts { ... on User { name } ... on Admin { name } } } } } ... on Admin { name similarAccounts { ... on User { name similarAccounts { ... on User { name } ... on Admin { name } } } ... on Admin { name similarAccounts { ... on User { name } ... on Admin { name } } } } } } } `, { data: { accounts: [ { name: "u1-name", similarAccounts: [ { name: "u1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] }, { name: "a1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] } ] }, { name: "a1-name", similarAccounts: [ { name: "u1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] }, { name: "a1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] } ] } ] } } ) ]; var index = testkit.serve("child-type-mismatch", [a, b], test); exports.default = index;