@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
230 lines (211 loc) • 4.08 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: "p-1",
name: "Product 1",
price: 10
},
{
id: "p-2",
name: "Product 2",
price: 20
}
];
const categories = [
{
id: "pc-1",
name: "Category 1"
},
{
id: "c-2",
name: "Category 2"
}
];
var node = testkit.createSubgraph("node", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
type Query {
productNode: Node
categoryNode: Node
}
interface Node {
id: ID!
}
type Product implements Node @key(fields: "id") {
id: ID!
}
type Category implements Node @key(fields: "id") {
id: ID!
}
`
),
resolvers: {
Query: {
productNode() {
return {
__typename: "Product",
id: products[0].id
};
},
categoryNode() {
return {
__typename: "Category",
id: categories[0].id
};
}
},
Product: {
__resolveReference(key) {
const product = products.find((p) => p.id === key.id);
if (!product) {
return null;
}
return {
id: product.id
};
}
},
Category: {
__resolveReference(key) {
const cat = categories.find((c) => c.id === key.id);
if (!cat) {
return null;
}
return {
id: cat.id
};
}
}
}
});
var nodeTwo = testkit.createSubgraph("node-two", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
interface Node {
id: ID!
}
type Product implements Node @key(fields: "id") {
id: ID!
}
type Category implements Node @key(fields: "id") {
id: ID!
}
`
),
resolvers: {
Product: {
__resolveReference(key) {
const product = products.find((p) => p.id === key.id);
if (!product) {
return null;
}
return {
id: product.id
};
}
},
Category: {
__resolveReference(key) {
const cat = categories.find((c) => c.id === key.id);
if (!cat) {
return null;
}
return {
id: cat.id
};
}
}
}
});
var types = testkit.createSubgraph("types", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@shareable"]
)
interface Node {
id: ID!
}
type Product implements Node @key(fields: "id") @shareable {
id: ID!
name: String!
price: Float!
}
type Category implements Node @key(fields: "id") {
id: ID!
name: String!
}
`
),
resolvers: {
Product: {
__resolveReference(key) {
const product = products.find((p) => p.id === key.id);
if (!product) {
return null;
}
return {
id: product.id,
name: product.name,
price: product.price
};
}
},
Category: {
__resolveReference(key) {
const cat = categories.find((c) => c.id === key.id);
if (!cat) {
return null;
}
return {
id: cat.id,
name: cat.name
};
}
}
}
});
var tests = [
testkit.createTest(
/* GraphQL */
`
{
productNode {
... on Product {
id
name
__typename
price
}
}
}
`,
{
data: {
productNode: {
id: "p-1",
name: "Product 1",
__typename: "Product",
price: 10
}
}
}
)
];
var index = testkit.serve("node", [node, nodeTwo, types], tests);
exports.default = index;