@pact-foundation/pact
Version:
Pact for all things Javascript
55 lines (54 loc) • 2.63 kB
TypeScript
import { AnyJson, JsonMap } from '../../common/jsonTypes';
import { Metadata } from '../../dsl/message';
export type MessageContents = unknown;
export interface SynchronousMessage {
Request: MessageContents;
Response: MessageContents[];
}
export interface PluginConfig {
plugin: string;
version: string;
}
export interface TransportConfig {
port: number;
address: string;
}
export type V4MessagePluginRequestBuilderFunc = (builder: V4SynchronousMessageWithRequestBuilder) => void;
export type V4MessagePluginResponseBuilderFunc = (builder: V4SynchronousMessageWithResponseBuilder) => void;
export interface V4SynchronousPact {
addSynchronousMessage(description: string): V4UnconfiguredSynchronousMessage;
}
export interface V4UnconfiguredSynchronousMessage {
given(state: string, parameters?: JsonMap): V4UnconfiguredSynchronousMessage;
usingPlugin(config: PluginConfig): V4SynchronousMessageWithPlugin;
withRequest(r: V4MessagePluginRequestBuilderFunc): V4SynchronousMessageWithRequest;
}
export interface V4SynchronousMessageWithPlugin {
usingPlugin(config: PluginConfig): V4SynchronousMessageWithPlugin;
withPluginContents(contents: string, contentType: string): V4SynchronousMessageWithPluginContents;
}
export interface V4Message {
withMetadata(metadata: Metadata): V4Message;
}
export interface V4SynchronousMessageWithRequestBuilder {
withContent(contentType: string, body: Buffer): V4SynchronousMessageWithRequestBuilder;
withJSONContent(content: unknown): V4SynchronousMessageWithRequestBuilder;
}
export interface V4SynchronousMessageWithRequest {
withResponse(builder: V4MessagePluginResponseBuilderFunc): V4SynchronousMessageWithResponse;
}
export interface V4SynchronousMessageWithResponseBuilder {
withMetadata(metadata: Metadata): V4SynchronousMessageWithResponseBuilder;
withContent(contentType: string, body: Buffer): V4SynchronousMessageWithResponseBuilder;
withJSONContent(content: unknown): V4SynchronousMessageWithResponseBuilder;
}
export interface V4SynchronousMessageWithPluginContents {
executeTest<T>(integrationTest: (m: SynchronousMessage) => Promise<T>): Promise<T | undefined>;
startTransport(transport: string, address: string, config?: AnyJson): V4SynchronousMessageWithTransport;
}
export interface V4SynchronousMessageWithTransport {
executeTest<T>(integrationTest: (tc: TransportConfig, m: SynchronousMessage) => Promise<T>): Promise<T | undefined>;
}
export interface V4SynchronousMessageWithResponse {
executeTest<T>(integrationTest: (m: SynchronousMessage) => Promise<T>): Promise<T | undefined>;
}