@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
237 lines (222 loc) • 3.58 kB
JavaScript
'use strict';
var testkit = require('./testkit-CAf-AsDy.cjs');
require('@apollo/composition');
require('graphql');
require('fets');
require('@apollo/subgraph');
require('graphql-yoga');
const products = [
{
__typename: "Bread",
id: "p1",
name: "Bread"
}
];
var a = testkit.createSubgraph("a", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@interfaceObject"]
)
interface Node @key(fields: "id") {
id: ID!
}
type Product @key(fields: "id", resolvable: false) @interfaceObject {
id: ID!
}
type Query {
a: Node
product: Product!
}
`
),
resolvers: {
Query: {
a() {
return { __typename: "Node", id: "n1" };
},
product() {
return { __typename: "Product", id: products[0].id };
}
},
Node: {
__resolveReference() {
throw new Error("Not resolvable as it is an interface object");
}
}
}
});
var b = testkit.createSubgraph("b", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@interfaceObject"]
)
type Node @key(fields: "id", resolvable: false) @interfaceObject {
id: ID!
field: String
}
interface Product @key(fields: "id") {
id: ID!
}
type Bread implements Product @key(fields: "id") {
id: ID!
name: String!
}
type Query {
b: Node
}
`
),
resolvers: {
Query: {
b() {
return { __typename: "Node", id: "n1" };
}
},
Node: {
__resolveReference() {
throw new Error("Not resolvable");
},
field() {
return "foo";
}
},
Product: {
__resolveReference(key) {
return products.find((p) => p.id === key.id);
}
},
Bread: {
__resolveReference(key) {
return products.find((p) => p.id === key.id);
}
}
}
});
var test = [
testkit.createTest(
/* GraphQL */
`
query {
b {
id
field
}
}
`,
{
data: {
b: {
id: "n1",
field: "foo"
}
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
a {
field
}
}
`,
{
data: null,
errors: true
}
),
testkit.createTest(
/* GraphQL */
`
query {
b {
id
}
}
`,
{
data: {
b: {
id: "n1"
}
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
a {
id
}
}
`,
{
data: {
a: null
},
errors: true
}
),
testkit.createTest(
/* GraphQL */
`
query {
product {
id
}
}
`,
{
data: {
product: {
id: "p1"
}
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
product {
id
name
}
}
`,
{
errors: true
}
),
testkit.createTest(
/* GraphQL */
`
query {
product {
... on Bread {
id
}
}
}
`,
{
data: {
product: {
id: "p1"
}
}
}
)
];
var index = testkit.serve("non-resolvable-interface-object", [a, b], test);
exports.default = index;