UNPKG

@graphql-hive/federation-gateway-audit

Version:
231 lines (217 loc) 3.52 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", type: "REGULAR" }, { id: "u2", type: "ANONYMOUS" } ]; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@shareable"] ) type Query { users: [User] } type User @key(fields: "id") { id: ID type: UserType @shareable } enum UserType { REGULAR } ` ), resolvers: { Query: { users() { return users; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, type: user.type }; } } } }); var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@inaccessible", "@shareable"] ) type Query { usersByType(type: UserType!): [User!] usersB: [User!] } extend type User @key(fields: "id") { id: ID type: UserType @shareable } enum UserType { ANONYMOUS @inaccessible REGULAR } ` ), resolvers: { Query: { usersByType(_, { type }) { return users.filter((u) => u.type === type); }, usersB() { return users; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, type: user.type }; } } } }); var test = [ testkit.createTest( /* GraphQL */ ` query { users { id } } `, { data: { users: [ { id: "u1" }, { id: "u2" } ] } } ), testkit.createTest( /* GraphQL */ ` query { users { id type } } `, { errors: true, data: { users: [ { id: "u1", type: "REGULAR" }, { id: "u2", type: null } ] } } ), testkit.createTest( /* GraphQL */ ` query { usersB { id type } } `, { data: { usersB: [ { id: "u1", type: "REGULAR" }, { id: "u2", type: null } ] } } ), testkit.createTest( /* GraphQL */ ` query { usersByType(type: REGULAR) { id type } } `, { data: { usersByType: [ { id: "u1", type: "REGULAR" } ] } } ), testkit.createTest( /* GraphQL */ ` query { usersByType(type: ANONYMOUS) { id type } } `, { errors: true, data: null } ) ]; var index = testkit.serve("enum-intersection", [a, b], test); exports.default = index;