graphql-codegen-typescript-fabbrica
graphql-codegen-typescript-fabbrica copied to clipboard
Support `.buildConnection(...)`
trafficstars
Add a utility that allows users to build connections without defining XxxEdgeFactory or XxxConnectionFactory.
Example
import { defineBookFactory, dynamic } from '../__generated__/fabbrica';
const PageInfoFactory = definePageInfoFactory({
defaultFields: {
__typename: 'PageInfo',
},
});
const BookFactory = defineBookFactory({
defaultFields: {
__typename: 'Book',
id: dynamic(({ seq }) => `Book-${seq}`),
},
PageInfoFactory,
});
// Basic
const bookConnection1 = await BookFactory.connection(2);
expect(bookConnection1).toStrictEqual({
__typename: 'BookConnection',
edges: [
{ __typename: 'BookEdge', node: { __typename: 'Book', id: 'Book-1' }, cursor: 'BookEdge-1' },
{ __typename: 'BookEdge', node: { __typename: 'Book', id: 'Book-2' }, cursor: 'BookEdge-2' },
],
pageInfo: {
__typename: 'PageInfo',
startCursor: 'BookEdge-1',
endCursor: 'BookEdge-2',
},
});
BookFactory.resetSequence();
// Override connection or edge fields
const bookConnection2 = await BookFactory.connection(2, {
pageInfo: dynamic(
() => PageInfoFactory.build({ hasPreviousPage: false, hasNextPage: true }),
),
});
expect(bookConnection2).toStrictEqual({
__typename: 'BookConnection',
edges: [
{ __typename: 'BookEdge', node: { __typename: 'Book', id: 'Book-1' }, cursor: 'BookEdge-1' },
{ __typename: 'BookEdge', node: { __typename: 'Book', id: 'Book-2' }, cursor: 'BookEdge-2' },
],
pageInfo: {
__typename: 'PageInfo',
hasPreviousPage: false,
hasNextPage: true,
startCursor: 'BookEdge-1',
endCursor: 'BookEdge-2',
},
});
BookFactory.resetSequence();
// Custom Connection Fields (e.g. `totalCount`)
const bookConnection3 = await BookFactory.connection(2, {
totalCount: 3, // Add
pageInfo: dynamic(
() => PageInfoFactory.build({ hasPreviousPage: false, hasNextPage: true }),
),
});
expect(bookConnection3).toStrictEqual({
__typename: 'BookConnection',
edges: [
{ __typename: 'BookEdge', node: { __typename: 'Book', id: 'Book-1' }, cursor: 'BookEdge-1' },
{ __typename: 'BookEdge', node: { __typename: 'Book', id: 'Book-2' }, cursor: 'BookEdge-2' },
],
pageInfo: {
__typename: 'PageInfo',
hasPreviousPage: false,
hasNextPage: true,
startCursor: 'BookEdge-1',
endCursor: 'BookEdge-2',
},
totalCount: 3, // Added
});
BookFactory.resetSequence();
Limitation
- Default values for
hasPreviousPageandtotalCountcannot be set.- If you want to set default values, use
defineXxxConnectionordefineXxxEdge.
- If you want to set default values, use