UNPKG

@graphql-hive/federation-gateway-audit

Version:
253 lines (237 loc) 4.24 kB
'use strict'; var testkit = require('./testkit-CAf-AsDy.cjs'); require('@apollo/composition'); require('graphql'); require('fets'); require('@apollo/subgraph'); require('graphql-yoga'); const imagePosts = [ { __typename: "ImagePost", id: "i1", createdAt: "i1-createdAt" }, { __typename: "ImagePost", id: "i2", createdAt: "i2-createdAt" } ]; const textPosts = [ { __typename: "TextPost", id: "t1", createdAt: "t1-createdAt", body: "t1-body" }, { __typename: "TextPost", id: "t2", createdAt: "t2-createdAt", body: "t2-body" } ]; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"]) interface Post { id: ID! createdAt: String! } type ImagePost implements Post @key(fields: "id") { id: ID! createdAt: String! } type Query { feed: [Post] } ` ), resolvers: { Query: { feed() { return imagePosts; } }, ImagePost: { __resolveReference(key) { const post = imagePosts.find((p) => p.id === key.id); if (!post) { return null; } return { id: post.id, createdAt: post.createdAt }; }, createdAt() { return "NEVER"; } } } }); var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@shareable", "@override"] ) interface Post { id: ID! createdAt: String! } type TextPost implements Post @key(fields: "id") { id: ID! createdAt: String! body: String! } interface AnotherPost { id: ID! createdAt: String! } type ImagePost implements AnotherPost @key(fields: "id") { id: ID! createdAt: String! @override(from: "a") } type Query { anotherFeed: [AnotherPost] } ` ), resolvers: { Query: { anotherFeed() { return imagePosts; } }, TextPost: { __resolveReference(key) { const post = textPosts.find((p) => p.id === key.id); if (!post) { return null; } return { id: post.id, createdAt: post.createdAt, body: post.body }; } }, ImagePost: { __resolveReference(key) { const post = imagePosts.find((p) => p.id === key.id); if (!post) { return null; } return { id: post.id, createdAt: post.createdAt }; } } } }); var test = [ testkit.createTest( /* GraphQL */ ` query { feed { id createdAt } } `, { data: { feed: [ { id: "i1", createdAt: "i1-createdAt" }, { id: "i2", createdAt: "i2-createdAt" } ] } } ), testkit.createTest( /* GraphQL */ ` query { feed { ... on TextPost { id body } } } `, { data: { feed: [{}, {}] } } ), testkit.createTest( /* GraphQL */ ` query { anotherFeed { createdAt } } `, { data: { anotherFeed: [ { createdAt: "i1-createdAt" }, { createdAt: "i2-createdAt" } ] } } ), testkit.createTest( /* GraphQL */ ` { anotherFeed { createdAt id ... on ImagePost { createdAt id } } } `, { data: { anotherFeed: [ { createdAt: "i1-createdAt", id: "i1" }, { createdAt: "i2-createdAt", id: "i2" } ] } } ) ]; var index = testkit.serve("override-type-interface", [a, b], test); exports.default = index;