Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add pactffi_given_with_params for params #476

Merged
merged 1 commit into from
Jan 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions native/addon.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) {
exports.Set(Napi::String::New(env, "pactffiUponReceiving"), Napi::Function::New(env, PactffiUponReceiving));
exports.Set(Napi::String::New(env, "pactffiGiven"), Napi::Function::New(env, PactffiGiven));
exports.Set(Napi::String::New(env, "pactffiGivenWithParam"), Napi::Function::New(env, PactffiGivenWithParam));
exports.Set(Napi::String::New(env, "pactffiGivenWithParams"), Napi::Function::New(env, PactffiGivenWithParams));
exports.Set(Napi::String::New(env, "pactffiWithRequest"), Napi::Function::New(env, PactffiWithRequest));
exports.Set(Napi::String::New(env, "pactffiWithQueryParameter"), Napi::Function::New(env, PactffiWithQueryParameter));
exports.Set(Napi::String::New(env, "pactffiWithSpecification"), Napi::Function::New(env, PactffiWithSpecification));
Expand Down
58 changes: 58 additions & 0 deletions native/consumer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -678,6 +678,64 @@ Napi::Value PactffiGivenWithParam(const Napi::CallbackInfo& info) {
return Napi::Boolean::New(env, res);
}

/**
* Adds a provider state to the Interaction with a set of parameter key and value pairs in JSON
* form. If the params is not an JSON object, it will add it as a single parameter with a `value`
* key.
*
* # Parameters
* * `description` - The provider state description.
* * `params` - Parameter values as a JSON fragment.
*
* # Errors
* Returns EXIT_FAILURE (1) if the interaction or Pact can't be modified (i.e. the mock server
* for it has already started).
* Returns 2 and sets the error message (which can be retrieved with `pactffi_get_error_message`)
* if the parameter values con't be parsed as JSON.
* Returns 3 if any of the C strings are not valid.
*
*
* C interface:
*
* int pactffi_given_with_params(InteractionHandle interaction,
* const char *description,
* const char *params);
*/
Napi::Value PactffiGivenWithParams(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();

if (info.Length() < 4) {
throw Napi::Error::New(env, "PactffiGivenWithParams received < 4 arguments");
}

if (!info[0].IsNumber()) {
throw Napi::Error::New(env, "PactffiGivenWithParams(arg 0) expected a InteractionHandle (uint32_t)");
}

if (!info[1].IsString()) {
throw Napi::Error::New(env, "PactffiGivenWithParams(arg 1) expected a string");
}

if (!info[2].IsString()) {
throw Napi::Error::New(env, "PactffiGivenWithParams(arg 2) expected a string");
}

if (!info[3].IsString()) {
throw Napi::Error::New(env, "PactffiGivenWithParams(arg 3) expected a string");
}

InteractionHandle interaction = info[0].As<Napi::Number>().Uint32Value();
std::string description = info[1].As<Napi::String>().Utf8Value();
std::string params = info[2].As<Napi::String>().Utf8Value();

int res = pactffi_given_with_params(interaction, description.c_str(), params.c_str());

if (res > 0) {
return Napi::Boolean::New(env, false);
}
return Napi::Boolean::New(env, true);
}

/**
* Configures the request for the Interaction. Returns false if the interaction or Pact can't be
* modified (i.e. the mock server for it has already started)
Expand Down
1 change: 1 addition & 0 deletions native/consumer.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Napi::Value PactffiCreateMockServerForPact(const Napi::CallbackInfo& info);
Napi::Value PactffiCreateMockServer(const Napi::CallbackInfo& info);
Napi::Value PactffiGiven(const Napi::CallbackInfo& info);
Napi::Value PactffiGivenWithParam(const Napi::CallbackInfo& info);
Napi::Value PactffiGivenWithParams(const Napi::CallbackInfo& info);
Napi::Value PactffiMockServerLogs(const Napi::CallbackInfo& info);
Napi::Value PactffiMockServerMatched(const Napi::CallbackInfo& info);
Napi::Value PactffiMockServerMismatches(const Napi::CallbackInfo& info);
Expand Down
8 changes: 8 additions & 0 deletions src/consumer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ const asyncMessage = (ffi: Ffi, interactionPtr: number) => ({
given: (state: string) => ffi.pactffiMessageGiven(interactionPtr, state),
givenWithParam: (state: string, name: string, value: string) =>
ffi.pactffiMessageGivenWithParam(interactionPtr, state, name, value),
givenWithParams: (state: string, params: string) =>
ffi.pactffiMessageGivenWithParams(interactionPtr, state, params),
withContents: (body: string, contentType: string) =>
ffi.pactffiMessageWithContents(interactionPtr, contentType, body),
withBinaryContents: (body: Buffer, contentType: string) =>
Expand Down Expand Up @@ -181,6 +183,8 @@ export const makeConsumerPact = (
given: (state: string) => ffi.pactffiGiven(interactionPtr, state),
givenWithParam: (state: string, name: string, value: string) =>
ffi.pactffiGivenWithParam(interactionPtr, state, name, value),
givenWithParams: (state: string, params: string) =>
ffi.pactffiGivenWithParams(interactionPtr, state, params),
withRequestContents: (body: string, contentType: string) =>
ffi.pactffiWithBody(
interactionPtr,
Expand Down Expand Up @@ -241,6 +245,8 @@ export const makeConsumerPact = (
given: (state: string) => ffi.pactffiGiven(interactionPtr, state),
givenWithParam: (state: string, name: string, value: string) =>
ffi.pactffiGivenWithParam(interactionPtr, state, name, value),
givenWithParams: (state: string, params: string) =>
ffi.pactffiGivenWithParams(interactionPtr, state, params),
withRequest: (method: string, path: string) =>
ffi.pactffiWithRequest(interactionPtr, method, path),
withQuery: (name: string, index: number, value: string) =>
Expand Down Expand Up @@ -451,6 +457,8 @@ export const makeConsumerMessagePact = (
given: (state: string) => ffi.pactffiGiven(interactionPtr, state),
givenWithParam: (state: string, name: string, value: string) =>
ffi.pactffiGivenWithParam(interactionPtr, state, name, value),
givenWithParams: (state: string, params: string) =>
ffi.pactffiGivenWithParams(interactionPtr, state, params),
withRequestContents: (body: string, contentType: string) =>
ffi.pactffiWithBody(
interactionPtr,
Expand Down
3 changes: 3 additions & 0 deletions src/consumer/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ export type ConsumerInteraction = PluginInteraction & {
uponReceiving: (description: string) => boolean;
given: (state: string) => boolean;
givenWithParam: (state: string, name: string, value: string) => boolean;
givenWithParams: (state: string, params: string) => boolean;
withRequest: (method: string, path: string) => boolean;
withQuery: (name: string, index: number, value: string) => boolean;
withStatus: (status: number) => boolean;
Expand Down Expand Up @@ -233,6 +234,7 @@ export type ConsumerPact = PluginPact & {
export type AsynchronousMessage = RequestPluginInteraction & {
given: (state: string) => void;
givenWithParam: (state: string, name: string, value: string) => void;
givenWithParams: (state: string, params: string) => void;
expectsToReceive: (description: string) => void;
withMetadata: (name: string, value: string) => void;
withContents: (body: string, contentType: string) => void;
Expand All @@ -245,6 +247,7 @@ export type ConsumerMessage = AsynchronousMessage;
export type SynchronousMessage = PluginInteraction & {
given: (state: string) => void;
givenWithParam: (state: string, name: string, value: string) => void;
givenWithParams: (state: string, params: string) => void;
withMetadata: (name: string, value: string) => void;
withRequestContents: (body: string, contentType: string) => void;
withResponseContents: (body: string, contentType: string) => void;
Expand Down
10 changes: 10 additions & 0 deletions src/ffi/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,11 @@ export type FfiConsumerFunctions = {
name: string,
value: string
): boolean;
pactffiGivenWithParams(
handle: FfiInteractionHandle,
description: string,
params: string
): boolean;
pactffiWithRequest(
handle: FfiInteractionHandle,
method: string,
Expand Down Expand Up @@ -278,6 +283,11 @@ export type FfiConsumerFunctions = {
key: string,
value: string
): void;
pactffiMessageGivenWithParams(
handle: FfiMessageHandle,
description: string,
params: string
): void;
pactffiMessageWithContents(
handle: FfiMessageHandle,
contentType: string,
Expand Down
Loading