graphile-test
Version:
PostGraphile Testing
163 lines (162 loc) • 5.42 kB
JavaScript
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
};
};