UNPKG

@vendure/testing

Version:

End-to-end testing tools for Vendure projects

118 lines (117 loc) 4.03 kB
import { TypedDocumentNode } from '@graphql-typed-document-node/core'; import { VendureConfig } from '@vendure/core'; import { DocumentNode } from 'graphql'; import { RequestInit, Response } from 'node-fetch'; import { QueryParams } from './types'; /** * @description * A minimalistic GraphQL client for populating and querying test data. * * @docsCategory testing */ export declare class SimpleGraphQLClient { private vendureConfig; private apiUrl; private authToken; private channelToken; private headers; constructor(vendureConfig: Required<VendureConfig>, apiUrl?: string); /** * @description * Sets the authToken to be used in each GraphQL request. */ setAuthToken(token: string): void; /** * @description * Sets the authToken to be used in each GraphQL request. */ setChannelToken(token: string | null): void; /** * @description * Returns the authToken currently being used. */ getAuthToken(): string; /** * @description * Performs both query and mutation operations. */ query<T = any, V extends Record<string, any> = Record<string, any>>(query: DocumentNode | TypedDocumentNode<T, V>, variables?: V, queryParams?: QueryParams): Promise<T>; /** * @description * Performs a raw HTTP request to the given URL, but also includes the authToken & channelToken * headers if they have been set. Useful for testing non-GraphQL endpoints, e.g. for plugins * which make use of REST controllers. */ fetch(url: string, options?: RequestInit): Promise<Response>; /** * @description * Performs a query or mutation and returns the resulting status code. */ queryStatus<T = any, V extends Record<string, any> = Record<string, any>>(query: DocumentNode, variables?: V): Promise<number>; /** * @description * Attempts to log in with the specified credentials. */ asUserWithCredentials(username: string, password: string): Promise<any>; /** * @description * Logs in as the SuperAdmin user. */ asSuperAdmin(): Promise<void>; /** * @description * Logs out so that the client is then treated as an anonymous user. */ asAnonymousUser(): Promise<void>; private makeGraphQlRequest; private getResult; /** * @description * Perform a file upload mutation. * * Upload spec: https://github.com/jaydenseric/graphql-multipart-request-spec * * Discussion of issue: https://github.com/jaydenseric/apollo-upload-client/issues/32 * * @param mutation - GraphQL document for a mutation that has input files * with the Upload type. * @param filePaths - Array of paths to files, in the same order that the * corresponding Upload fields appear in the variables for the mutation. * @param mapVariables - Function that must return the variables for the * mutation, with `null` as the value for each `Upload` field. * * @example * ```ts * // Testing a custom mutation: * const result = await client.fileUploadMutation({ * mutation: gql` * mutation AddSellerImages($input: AddSellerImagesInput!) { * addSellerImages(input: $input) { * id * name * } * } * `, * filePaths: ['./images/profile-picture.jpg', './images/logo.png'], * mapVariables: () => ({ * name: "George's Pans", * profilePicture: null, // corresponds to filePaths[0] * branding: { * logo: null // corresponds to filePaths[1] * } * }) * }); * ``` */ fileUploadMutation(options: { mutation: DocumentNode; filePaths: string[]; mapVariables: (filePaths: string[]) => any; }): Promise<any>; } export declare class ClientError extends Error { response: any; request: any; constructor(response: any, request: any); private static extractMessage; }