@pact-foundation/pact
Version:
Pact for all things Javascript
104 lines (103 loc) • 5.32 kB
TypeScript
import type { AnyJson, JsonMap } from '../../common/jsonTypes';
import type { Metadata } from '../../dsl/message';
import type { Rules } from '../../v3/types';
export type MessageContents = {
content: AnyJson | Buffer;
};
export type Comment = string;
export type CustomComment = {
key: string;
value: string;
};
export interface SynchronousMessage {
Request: MessageContents;
Response: MessageContents[];
}
export interface AsynchronousMessage {
contents: MessageContents;
metadata: Metadata;
}
export interface PluginConfig {
plugin: string;
version: string;
}
export interface TransportConfig {
port: number;
address: string;
}
export type V4AsynchronousMessageBuilderFunc = (builder: V4AsynchronousMessageBuilder) => void;
export type V4MessageRequestBuilderFunc = (builder: V4SynchronousMessageWithRequestBuilder) => void;
export type V4MessageResponseBuilderFunc = (builder: V4SynchronousMessageWithResponseBuilder) => void;
export interface V4SynchronousPact {
addSynchronousMessage(description: string): V4UnconfiguredSynchronousMessage;
}
export interface V4UnconfiguredSynchronousMessage {
given(state: string, parameters?: JsonMap): V4UnconfiguredSynchronousMessage;
pending(pending?: boolean): V4UnconfiguredSynchronousMessage;
comment(comment: Comment | CustomComment): V4UnconfiguredSynchronousMessage;
testName(name: string): V4UnconfiguredSynchronousMessage;
reference(group: string, name: string, value: string): V4UnconfiguredSynchronousMessage;
usingPlugin(config: PluginConfig): V4SynchronousMessageWithPlugin;
withRequest(r: V4MessageRequestBuilderFunc): 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;
withMatchingRules(rules: Rules): V4SynchronousMessageWithRequestBuilder;
}
export interface V4SynchronousMessageWithRequest {
withResponse(builder: V4MessageResponseBuilderFunc): V4SynchronousMessageWithResponse;
}
export interface V4SynchronousMessageWithResponseBuilder {
withMetadata(metadata: Metadata): V4SynchronousMessageWithResponseBuilder;
withContent(contentType: string, body: Buffer): V4SynchronousMessageWithResponseBuilder;
withJSONContent(content: unknown): V4SynchronousMessageWithResponseBuilder;
withMatchingRules(rules: Rules): 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>;
}
export interface V4UnconfiguredAsynchronousMessage {
given(state: string, parameters?: JsonMap): V4UnconfiguredAsynchronousMessage;
pending(pending?: boolean): V4UnconfiguredAsynchronousMessage;
comment(comment: Comment | CustomComment): V4UnconfiguredAsynchronousMessage;
testName(name: string): V4UnconfiguredAsynchronousMessage;
reference(group: string, name: string, value: string): V4UnconfiguredAsynchronousMessage;
usingPlugin(config: PluginConfig): V4AsynchronousMessageWithPlugin;
expectsToReceive(description: string, contents: V4AsynchronousMessageBuilderFunc): V4AsynchronousMessageWithContent;
}
export interface V4AsynchronousMessageWithPlugin {
usingPlugin(config: PluginConfig): V4AsynchronousMessageWithPlugin;
expectsToReceive(description: string): V4AsynchronousMessageWithPlugin;
withPluginContents(contents: string, contentType: string): V4AsynchronousMessageWithPluginContents;
}
export interface V4AsynchronousMessageWithPluginContents {
executeTest<T>(integrationTest: (m: AsynchronousMessage) => Promise<T>): Promise<T | undefined>;
startTransport(transport: string, address: string, config?: AnyJson): V4AsynchronousMessageWithTransport;
}
export interface V4AsynchronousMessageWithTransport {
executeTest<T>(integrationTest: (tc: TransportConfig, m: AsynchronousMessage) => Promise<T>): Promise<T | undefined>;
}
export interface V4AsynchronousMessageWithContent {
executeTest<T>(integrationTest: (m: AsynchronousMessage) => Promise<T>): Promise<T | undefined>;
}
export interface V4AsynchronousMessageBuilder {
withMetadata(metadata: Metadata): V4AsynchronousMessageBuilder;
withContent(contentType: string, body: Buffer): V4AsynchronousMessageBuilder;
withJSONContent(content: unknown): V4AsynchronousMessageBuilder;
withMatchingRules(rules: Rules): V4AsynchronousMessageBuilder;
}