@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
132 lines (122 loc) • 2.39 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 = [
{
id: "p1",
pid: "p1-pid",
price: 12.3,
upc: "upc1",
name: "p1-name"
}
];
var a = testkit.createSubgraph("a", {
typeDefs: (
/* GraphQL */
`
type Query {
productInA: Product
}
type Product @key(fields: "id") {
id: ID!
name: String
pid: ID
}
`
),
resolvers: {
Query: {
productInA() {
return {
id: products[0].id,
name: products[0].name,
pid: products[0].pid
};
}
},
Product: {
__resolveReference(key) {
if (products[0].id !== key.id) {
return null;
}
return {
id: products[0].id,
name: products[0].name,
pid: products[0].pid
};
}
}
}
});
var b = testkit.createSubgraph("b", {
typeDefs: (
/* GraphQL */
`
type Query {
productInB: Product
}
extend type Product @key(fields: "id name") @key(fields: "upc") {
id: ID @external
name: String @external
upc: String @external
price: Float!
}
`
),
resolvers: {
Query: {
productInB: () => {
return {
id: products[0].id,
name: products[0].name,
upc: products[0].upc,
price: products[0].price
};
}
},
Product: {
__resolveReference: (key) => {
const product = "id" in key ? products.find((p) => p.id === key.id && p.name === key.name) : products.find((p) => p.upc === key.upc);
return product ? {
id: product.id,
name: product.name,
upc: product.upc,
price: product.price
} : null;
}
}
}
});
var tests = [
testkit.createTest(
/* GraphQL */
`
query {
productInA {
id
pid
price
upc
name
}
}
`,
{
data: {
productInA: {
id: "p1",
pid: "p1-pid",
price: 12.3,
upc: "upc1",
name: "p1-name"
}
}
}
)
];
var index = testkit.serve("fed1-external-extends-resolvable", [a, b], tests);
exports.default = index;