Skip to content

Commit

Permalink
fix: Add support for state params to MessageProviderPact (pact-founda…
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelTamm committed Jun 30, 2022
1 parent 6844a2b commit 0affc55
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 8 deletions.
21 changes: 17 additions & 4 deletions src/dsl/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,30 @@ export interface Metadata {
[name: string]: string | Matcher<string>;
}

/**
* Defines a state a provider must be in.
*/
export interface ProviderState {
name: string;
params?: {
[name: string]: string;
};
}

/**
* A Message is an asynchronous Interaction, sent via a Provider
*
* @module Message
*/
export interface Message {
providerStates?: [{ name: string }];
providerStates?: ProviderState[];
description?: string;
metadata?: Metadata;
contents: AnyTemplate;
}

export interface ConcreteMessage {
providerStates?: [{ name: string }];
providerStates?: ProviderState[];
description?: string;
metadata?: Metadata;
contents: AnyJson;
Expand All @@ -36,7 +46,7 @@ export interface ConcreteMessage {
* @module Message
*/
export interface MessageDescriptor {
providerStates?: [{ name: string }];
providerStates?: ProviderState[];
description: string;
metadata?: Metadata;
}
Expand Down Expand Up @@ -76,5 +86,8 @@ export interface MessageProviders {
}

export interface StateHandlers {
[name: string]: (state: string) => Promise<unknown>;
[name: string]: (
state: string,
params?: { [name: string]: string }
) => Promise<unknown>;
}
20 changes: 17 additions & 3 deletions src/messageProviderPact.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ describe('MesageProvider', () => {
provider: 'myprovider',
stateHandlers: {
'some state': () => Promise.resolve('yay'),
'some state with params': (name, params) =>
Promise.resolve(`name: ${name}, params: ${JSON.stringify(params)}`),
},
});
});
Expand Down Expand Up @@ -122,10 +124,22 @@ describe('MesageProvider', () => {
describe('#setupStates', () => {
describe('when given a handler that exists', () => {
it('returns values of all resolved handlers', () => {
const findStateHandler = (provider as any).setupStates.bind(provider);
const setupStates = (provider as any).setupStates.bind(provider);
return expect(setupStates(successfulMessage)).to.eventually.deep.equal([
'yay',
]);
});
it('passes params to the handler', () => {
const setupStates = (provider as any).setupStates.bind(provider);
return expect(
findStateHandler(successfulMessage)
).to.eventually.deep.equal(['yay']);
setupStates({
providerStates: [
{ name: 'some state with params', params: { foo: 'bar' } },
],
})
).to.eventually.deep.equal([
'name: some state with params, params: {"foo":"bar"}',
]);
});
});
describe('when given a state that does not have a handler', () => {
Expand Down
2 changes: 1 addition & 1 deletion src/messageProviderPact.ts
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ export class MessageProviderPact {
: null;

if (handler) {
promises.push(handler(state.name));
promises.push(handler(state.name, state.params));
} else {
logger.warn(`no state handler found for "${state.name}", ignoring`);
}
Expand Down

0 comments on commit 0affc55

Please sign in to comment.