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

test(gov): add test for Tally function #17142

Merged
merged 1 commit into from
Jul 26, 2023

Conversation

tbruyelle
Copy link
Contributor

@tbruyelle tbruyelle commented Jul 26, 2023

Description

Although rather complex, the govKeeper.Tally function has no unit tests. This change adds a test that covers around 91% of the code, only some unexpected errors are not covered.

If this change is accepted, another will follow to refactor the function into smaller parts (without changing the test). This will address the TODO on top, reduce complexity, improve readability and reusability.

This test should also help for issues like #11422 and #10353. It's more comfortable to improve performance or completely rewrite the implementation with a high code coverage.

The setupGovKeeper had to be modified because it was registering some mocks expectations that cannot be overridden. It now takes an additional variadic argument that can be used to better customize the mocks expectations. Also, to improve readability, the mocks are all gathered in a new specific mocks struct.

Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.

I have...

  • included the correct type prefix in the PR title
  • added ! to the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • followed the guidelines for building modules
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • included comments for documenting Go code
  • updated the relevant documentation or specification
  • reviewed "Files changed" and left comments if necessary
  • run make lint and make test
  • confirmed all CI checks have passed

Reviewers Checklist

All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.

I have...

  • confirmed the correct type prefix in the PR title
  • confirmed ! in the type prefix if API or client breaking change
  • confirmed all author checklist items have been addressed
  • reviewed state machine logic
  • reviewed API design and naming
  • reviewed documentation is accurate
  • reviewed tests and test coverage
  • manually tested (if applicable)

Although rather complex, the `govKeeper.Tally` function has no unit
tests. This change adds a test that covers around 91% of the code, only
some unexpected errors are not covered.

If this change is accepted, another will follow to refactor the
function into smaller parts (without changing the test). This will
address the TODO on top, reduce complexity,  improve readability and
reusability.

This test should also help for issues like cosmos#11422 and cosmos#10353. It's more
comfortable to improve performance or completely rewrite the
implementation with a high code coverage.

The `setupGovKeeper` had to be modified because it was registering some
mocks expectations that cannot be overridden. It now takes an additional
variadic argument that can be used to better customize the mocks
expectations. Also, to improve readability, the mocks are all gathered in
a new specific `mocks` struct.
@tbruyelle tbruyelle requested a review from a team as a code owner July 26, 2023 12:24
Copy link
Member

@julienrbrt julienrbrt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! Yeah, units tests weren't created when we moved the previous tests to the integration folder (https://github.com/cosmos/cosmos-sdk/blob/6b4774266eeb03748937faf28663019ac332cc9c/tests/integration/gov/keeper/tally_test.go).

@tbruyelle
Copy link
Contributor Author

Nice! Yeah, units tests weren't created when we moved the previous tests to the integration folder (https://github.com/cosmos/cosmos-sdk/blob/6b4774266eeb03748937faf28663019ac332cc9c/tests/integration/gov/keeper/tally_test.go).

Oh I hadn't noticed those tests before, thanks for bringing them to my attention. I assume both unit and integration tests are welcome :).

@julienrbrt
Copy link
Member

Nice! Yeah, units tests weren't created when we moved the previous tests to the integration folder (6b47742/tests/integration/gov/keeper/tally_test.go).

Oh I hadn't noticed those tests before, thanks for bringing them to my attention. I assume both unit and integration tests are welcome :).

For sure!

@julienrbrt julienrbrt added this pull request to the merge queue Jul 26, 2023
Merged via the queue into cosmos:main with commit 7daf40a Jul 26, 2023
47 of 49 checks passed
@tbruyelle tbruyelle deleted the tbruyelle/test/gov-tally branch July 28, 2023 20:25
tbruyelle added a commit to atomone-hub/atomone that referenced this pull request Aug 29, 2024
tbruyelle added a commit to atomone-hub/atomone that referenced this pull request Aug 30, 2024
tbruyelle added a commit to atomone-hub/atomone that referenced this pull request Aug 30, 2024
tbruyelle added a commit to atomone-hub/atomone that referenced this pull request Sep 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants