UNPKG

graphql-query-test-mock

Version:

Mock queries to your GraphQL backend in your Jest tests.

67 lines (57 loc) 1.58 kB
// @flow strict import hash from 'object-hash'; import { DEFAULT_CONFIG } from './defaults'; import type { MockGraphQLConfig, MockGraphQLRecord } from './index'; import type { Variables } from './types'; export function getQueryMockID( queryName: string, variables: ?Variables, ignoreThesePropertiesInVariables: Array<string> ): string { const processedVariables = getVariables( variables, ignoreThesePropertiesInVariables ); return `${queryName}__${hash.sha1(processedVariables)}`; } export function getVariables( variables: ?Variables, ignoreThesePropertiesInVariables: Array<string> ): Variables { const vars = { ...variables }; ignoreThesePropertiesInVariables.forEach(propName => { delete vars[propName]; }); return vars; } export function createMockGraphQLRecord( config: MockGraphQLConfig, resolveQueryPromise?: Promise<mixed> ): MockGraphQLRecord { const queryMockConfig: MockGraphQLConfig = { variables: {}, ...DEFAULT_CONFIG, ...config }; let ignoreThesePropertiesInVariables: Array<string> = queryMockConfig.ignoreThesePropertiesInVariables || []; if (!queryMockConfig.matchOnVariables && !queryMockConfig.matchVariables) { ignoreThesePropertiesInVariables = Object.keys( queryMockConfig.variables || {} ); } return { id: getQueryMockID( queryMockConfig.name, queryMockConfig.variables, ignoreThesePropertiesInVariables ), queryMockConfig: { ...queryMockConfig, ignoreThesePropertiesInVariables }, resolveQueryPromise }; }