WireMock.Net icon indicating copy to clipboard operation
WireMock.Net copied to clipboard

WebHook Related Issues

Open Xor-el opened this issue 10 months ago • 3 comments

Describe the bug

Bug 1 (WebHook does not support Local Requests)

When trying to use the WebHook functionality to initiate a webhook, for online webhook URLs it works but for local ones, the receiving service receives no request.

Expected behavior:

It should work the same both for online and local webhooks.

Test to reproduce

  • 1 Clone Both Repos this and this, and build both projects.
  • 2 Go to the Online WebHook Url
  • 3 Run the Dummy Api project followed by the "WireMockBug001" project. (In case you get an error the first time you run the Demo, close it and run again.).
  • 4 Notice that the Online WebHook URL received our WebHook payload, but our Dummy service did not receive any request.

Bug 2 (WebHook does not post request body when using Body instead of BodyAsJson)

When trying to use the WebHook functionality to initiate a webhook, BodyAsJson works but Body doesn't.

Expected behavior:

It should work the same both for Body and BodyAsJson.

Test to reproduce

  • 1 Clone Both Repos this and this, and build both projects.
  • 2 Go to the Online WebHook Url
  • 3 Go to post-transaction-online.json mapping and comment BodyAsJson and uncomment Body. do same for post-transaction-local.json
  • 4 Build and run the Dummy Api project followed by the "WireMockBug001" project. (In case you get an error the first time you run the Demo, close it and run again.).
  • 5 Notice that the Online WebHook URL received our WebHook, but the payload body is null, but our Dummy service did not receive any request.

Other related info

Docker is needed to run the Demo as it uses WireMock.NET Test Container.

Xor-el avatar Mar 06 '25 22:03 Xor-el

Additional Question. Is it possible to define multiple WebHooks in a mapping as using the mapping below does not seem to work?

{
  "Request": {
    "Path": {
      "Matchers": [
        {
          "Name": "WildcardMatcher",
          "Pattern": "/api/transaction-online-multiple"
        }
      ]
    },
    "Methods": [
      "POST"
    ],
    "Body": {
      "Matcher": {
        "Name": "JsonPartialMatcher",
        "Pattern": {
          "transactions": [
            {
              "sourceBankCode": "99",
              "countryCode": "NG",
              "sourceAccount": "1234567890",
              "amountCurrency": "NGN"
            }
          ]
        }
      }
    }
  },
  "Response": {
    "StatusCode": 200,
    "BodyAsJson": {
      "statusCode": null,
      "statusMessage": null,
      "batchReferenceNo": "{{request.bodyAsJson.batchId}}",
      "eventID": "{{request.bodyAsJson.transferType}}"
    },
    "Headers": {
      "Content-Type": "application/json"
    },
    "UseTransformer": true
  },
  "Webhooks": [
    {
      "Request": {
        "Url": "https://webhook.site/e5b518cc-5fd3-4db8-8e51-c7a648cc42b5",
        "Method": "POST",
        "Headers": {
          "Content-Type": "application/json"
        },
        "BodyAsJson": {
          "message": "Webhook triggered!",
          "status": "success"
        },
        "UseTransformer": true,
        "TransformerType": "Handlebars",
        "TransformerReplaceNodeOptions": "EvaluateAndTryToConvert",
        "Delay": 1000
      }
    }
  ],
  "UseWebhooksFireAndForget": true
}

Xor-el avatar Mar 07 '25 09:03 Xor-el

Just made another discovery. It seems like setting "UseWebhooksFireAndForget" to true causes the webhook not to fire.

see sample mapping below

{
  "Request": {
    "Path": {
      "Matchers": [
        {
          "Name": "WildcardMatcher",
          "Pattern": "/api/transaction-online"
        }
      ]
    },
    "Methods": [
      "POST"
    ],
    "Body": {
      "Matcher": {
        "Name": "JsonPartialMatcher",
        "Pattern": {
          "transactions": [
            {
              "sourceBankCode": "99",
              "countryCode": "NG",
              "sourceAccount": "1234567890",
              "amountCurrency": "NGN"
            }
          ]
        }
      }
    }
  },
  "Response": {
    "StatusCode": 200,
    "BodyAsJson": {
      "statusCode": null,
      "statusMessage": null,
      "batchReferenceNo": "{{request.bodyAsJson.batchId}}",
      "eventID": "{{request.bodyAsJson.transferType}}"
    },
    "Headers": {
      "Content-Type": "application/json"
    },
    "UseTransformer": true
  },
  "Webhook": {
    "Request": {
      "Url": "https://webhook.site/e5b518cc-5fd3-4db8-8e51-c7a648cc42b5",
      "Method": "POST",
      "Headers": {
        "Content-Type": "application/json"
      },
      "BodyAsJson": {
        "message": "Webhook triggered!",
        "status": "success"
      },
      "UseTransformer": true,
      "TransformerType": "Handlebars",
      "TransformerReplaceNodeOptions": "EvaluateAndTryToConvert",
      "Delay": 1000
    }
  },
  "UseWebhooksFireAndForget": true
}

Xor-el avatar Mar 07 '25 11:03 Xor-el

I'll start investigating 'Bug 1 (WebHook does not support Local Requests)'...

StefH avatar May 16 '25 06:05 StefH