UNPKG

@graphql-hive/federation-gateway-audit

Version:
262 lines (249 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 users = [ { id: "u1", age: 11, friends: ["u2"] }, { id: "u2", age: 22, friends: ["u1"] } ]; var friends = testkit.createSubgraph("friends", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@inaccessible", "@shareable"] ) type Query { usersInFriends: [User!]! } type User @key(fields: "id") { id: ID friends(type: FriendType = FAMILY @inaccessible): [User!]! type: FriendType } enum FriendType { FAMILY @inaccessible FRIEND } ` ), resolvers: { Query: { usersInFriends() { return users.map((u) => ({ id: u.id, friends: u.friends })); } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, friends: user.friends }; }, friends(user) { return user.friends.map((id) => { const friend = users.find((u) => u.id === id); if (!friend) { return null; } return { id: friend.id, friends: friend.friends }; }); }, type() { return "FAMILY"; } } } }); var age = testkit.createSubgraph("age", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@inaccessible", "@shareable"] ) type Query { usersInAge: [User!]! @shareable } type User @key(fields: "id") { id: ID age: Int } ` ), resolvers: { Query: { usersInAge() { return users.map((u) => ({ id: u.id, age: u.age })); } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, age: user.age }; } } } }); var test = [ testkit.createTest( /* GraphQL */ ` query { usersInAge { id friends { id } } } `, { data: { usersInAge: [ { id: "u1", friends: [ { id: "u2" } ] }, { id: "u2", friends: [ { id: "u1" } ] } ] } } ), testkit.createTest( /* GraphQL */ ` query { usersInFriends { id friends { id } } } `, { data: { usersInFriends: [ { id: "u1", friends: [ { id: "u2" } ] }, { id: "u2", friends: [ { id: "u1" } ] } ] } } ), testkit.createTest( /* GraphQL */ ` query { usersInFriends { id friends(type: FRIEND) { id } } } `, { errors: true } ), testkit.createTest( /* GraphQL */ ` query { usersInFriends { id friends { id type } } } `, { data: { usersInFriends: [ { id: "u1", friends: [ { id: "u2", type: null } ] }, { id: "u2", friends: [ { id: "u1", type: null } ] } ] } } ) ]; var index = testkit.serve("simple-inaccessible", [friends, age], test); exports.default = index;