UNPKG

graphile-test

Version:
163 lines (162 loc) 5.42 kB
import { getConnections as getPgConnections } from 'pgsql-test'; import { GraphQLTest } from './graphile-test'; // Core unwrapping utility const unwrap = (res) => { if (res.errors?.length) { throw new Error(JSON.stringify(res.errors, null, 2)); } if (!res.data) { throw new Error('No data returned from GraphQL query'); } return res.data; }; // Base connection setup - shared across all variants const createConnectionsBase = async (input, seedAdapters) => { const conn = await getPgConnections(input, seedAdapters); const { pg, db, teardown: dbTeardown } = conn; const gqlContext = GraphQLTest(input, conn); await gqlContext.setup(); const teardown = async () => { await gqlContext.teardown(); await dbTeardown(); }; const baseQuery = (opts) => gqlContext.query(opts); const baseQueryPositional = (query, variables, commit, reqOptions) => gqlContext.query({ query, variables, commit, reqOptions }); return { pg, db, teardown, baseQuery, baseQueryPositional }; }; // ============================================================================ // REGULAR QUERY VERSIONS // ============================================================================ /** * Creates connections with raw GraphQL responses */ export const getConnectionsObject = async (input, seedAdapters) => { const { pg, db, teardown, baseQuery } = await createConnectionsBase(input, seedAdapters); return { pg, db, teardown, query: baseQuery }; }; /** * Creates connections with unwrapped GraphQL responses (throws on errors) */ export const getConnectionsObjectUnwrapped = async (input, seedAdapters) => { const { pg, db, teardown, baseQuery } = await createConnectionsBase(input, seedAdapters); const query = async (opts) => unwrap(await baseQuery(opts)); return { pg, db, teardown, query }; }; /** * Creates connections with logging for GraphQL queries */ export const getConnectionsObjectWithLogging = async (input, seedAdapters) => { const { pg, db, teardown, baseQuery } = await createConnectionsBase(input, seedAdapters); const query = async (opts) => { console.log('Executing GraphQL query:', opts.query); const result = await baseQuery(opts); console.log('GraphQL result:', result); return result; }; return { pg, db, teardown, query }; }; /** * Creates connections with timing for GraphQL queries */ export const getConnectionsObjectWithTiming = async (input, seedAdapters) => { const { pg, db, teardown, baseQuery } = await createConnectionsBase(input, seedAdapters); const query = async (opts) => { const start = Date.now(); const result = await baseQuery(opts); const duration = Date.now() - start; console.log(`GraphQL query took ${duration}ms`); return result; }; return { pg, db, teardown, query }; }; // ============================================================================ // POSITIONAL QUERY VERSIONS // ============================================================================ /** * Creates connections with raw GraphQL responses (positional API) */ export const getConnections = async (input, seedAdapters) => { const { pg, db, teardown, baseQueryPositional } = await createConnectionsBase(input, seedAdapters); return { pg, db, teardown, query: baseQueryPositional }; }; /** * Creates connections with unwrapped GraphQL responses (positional API, throws on errors) */ export const getConnectionsUnwrapped = async (input, seedAdapters) => { const { pg, db, teardown, baseQueryPositional } = await createConnectionsBase(input, seedAdapters); const query = async (query, variables, commit, reqOptions) => unwrap(await baseQueryPositional(query, variables, commit, reqOptions)); return { pg, db, teardown, query }; }; /** * Creates connections with logging for GraphQL queries (positional API) */ export const getConnectionsWithLogging = async (input, seedAdapters) => { const { pg, db, teardown, baseQueryPositional } = await createConnectionsBase(input, seedAdapters); const query = async (query, variables, commit, reqOptions) => { console.log('Executing positional GraphQL query:', query); const result = await baseQueryPositional(query, variables, commit, reqOptions); console.log('GraphQL result:', result); return result; }; return { pg, db, teardown, query }; }; /** * Creates connections with timing for GraphQL queries (positional API) */ export const getConnectionsWithTiming = async (input, seedAdapters) => { const { pg, db, teardown, baseQueryPositional } = await createConnectionsBase(input, seedAdapters); const query = async (query, variables, commit, reqOptions) => { const start = Date.now(); const result = await baseQueryPositional(query, variables, commit, reqOptions); const duration = Date.now() - start; console.log(`Positional GraphQL query took ${duration}ms`); return result; }; return { pg, db, teardown, query }; };