62 lines
2.2 KiB
TypeScript
62 lines
2.2 KiB
TypeScript
import { createGraphqlRegistry, GraphqlError } from "@suaveplan/api-graphql";
|
|
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
import { federatePlugins } from "./federation.js";
|
|
|
|
describe("federatePlugins", () => {
|
|
it("two plugins each extending Query both expose their fields", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const billing = createGraphqlRegistry();
|
|
billing.addTypes(
|
|
"type Query { _root: String } extend type Query { invoices: [String!]! }"
|
|
);
|
|
billing.addResolvers({ Query: { invoices: () => ["i_1"] } });
|
|
|
|
const crm = createGraphqlRegistry();
|
|
crm.addTypes("extend type Query { customers: [String!]! }");
|
|
crm.addResolvers({ Query: { customers: () => ["c_1"] } });
|
|
|
|
const result = federatePlugins([
|
|
{
|
|
plugin: "billing",
|
|
registry: billing as never,
|
|
},
|
|
{ plugin: "crm", registry: crm as never },
|
|
]);
|
|
expect(result.merged.sdl).toContain("invoices");
|
|
expect(result.merged.sdl).toContain("customers");
|
|
expect(result.resolvers.Query?.invoices).toBeDefined();
|
|
expect(result.resolvers.Query?.customers).toBeDefined();
|
|
});
|
|
|
|
it("same-field collision fails with GRAPHQL.SCHEMA_COLLISION", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const a = createGraphqlRegistry();
|
|
a.addTypes("type Query { invoices: [String!]! }");
|
|
const b = createGraphqlRegistry();
|
|
b.addTypes("type Query { invoices: [String!]! }");
|
|
expect(() =>
|
|
federatePlugins([
|
|
{ plugin: "a", registry: a as never },
|
|
{ plugin: "b", registry: b as never },
|
|
])
|
|
).toThrow(GraphqlError);
|
|
});
|
|
|
|
it("supports namespace wrapping", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const billing = createGraphqlRegistry();
|
|
billing.addTypes("extend type Query { invoices: [String!]! }");
|
|
const result = federatePlugins([
|
|
{
|
|
plugin: "billing",
|
|
registry: billing as never,
|
|
namespace: "Billing",
|
|
},
|
|
]);
|
|
expect(result.merged.sdl).toContain("Billing");
|
|
});
|
|
});
|