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

fix: allow hooks to run only once per interaction #1243

Merged
merged 1 commit into from
Nov 13, 2024

Conversation

lhokktyn
Copy link
Contributor

@lhokktyn lhokktyn commented Oct 8, 2024

Current behaviour will run the beforeEach and afterEach hooks multiple times if there are several provider states defined in an interaction. This is due to the way the hook are run on every call to /_pactSetup via the proxy.

This change will ensure each of those hooks is run only once per interaction, regardless of how many provider states are defined in that interaction.


Our primary use case in applying this fix was to be able to support multiple given() statements in our consumer tests without having them each trigger the beforeEach hook (which we want to use for resetting state), eg

await provider()
  .addInteraction()
  .given("has a pet with status", "sold")
  .given("has a pet with status", "pending")
  .uponReceiving("a request for pets with multiple statuses")
  ...

Which produces the following in the Pact JSON:

{
  "description": "a request for pets with multiple statuses",
  "pending": false,
  "providerStates": [
    {
      "name": "has a pet with status",
      "params": {
        "value": "sold"
      }
    },
    {
      "name": "has a pet with status",
      "params": {
        "value": "pending"
      }
    }
  ],
  ...
}

Which drives multiple calls to the /_pactSetup endpoint during Provider verification, one for each of the providerStates, and thus multiple calls to beforeEach.

This fix ensures the hooks are only run on the first setup call and on the last teardown call.

Current behaviour will run the beforeEach and afterEach hooks multiple
times if there are several provider states defined in an interaction.
This is due to the way the hook are run on every call to "/_pactSetup"
via the proxy.

This change will ensure each of those hooks is run only once per
interaction, regardless of how many provider states are defined in that
interaction.
@lhokktyn
Copy link
Contributor Author

@mefellows I'm not sure why all those checks have failed on the last push, as only the git commit message was altered. Maybe a temporary issue with the test broker?

@lhokktyn
Copy link
Contributor Author

Hi @mefellows . Do you think this may be a good candidate for merging? Let me know if you'd like anything revisiting. Cheers

@mefellows
Copy link
Member

Hi @lhokktyn - apologies for my tardiness, I'd like to test this out locally before merging. At a glance it looks good and I'm very appreciative of the tests also. I'll aim to get this out early next week.

@lhokktyn
Copy link
Contributor Author

Hey @mefellows no worries, appreciate your time :)

@mefellows mefellows merged commit b238fd0 into pact-foundation:master Nov 13, 2024
6 of 25 checks passed
@mefellows
Copy link
Member

Sorry for the delay here @lhokktyn - this change has been released into the latest version v13.1.5.

@lhokktyn
Copy link
Contributor Author

Brilliant! Thanks for the heads up @mefellows 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants