Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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(node): add exponential retry mechanism with idempotency headers #4462
feat(node): add exponential retry mechanism with idempotency headers #4462
Changes from 9 commits
41d77fd
b66965a
503257c
7475e22
6670e32
41296c2
071d59f
1323c04
d70b9f8
bf68b2d
3474d5a
a3e150d
2d548b4
208d803
bbcbb80
024d8cd
60a000d
8479ad0
b773f3a
01649c2
fe525ae
c75140c
1e8c1b5
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
without that change, tests for retries don't work.
I observed strange behavior - it sends GET request to
127.0.0.1:80
even when you send POST request to baseUrl, it messes up the request config.change to
^axios$
fixed that issue. This is also recommendation inside nock readme for axios.I also tested manually using symlink in testing repo's
node_modules
and retries work as expected.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider the case where every array item except the first is the same, like
[1,2,2,2,2]
. This function will currently returntrue
, because it's only comparing entries against the first item, not all of the entries.So we'll need to instead verify that the number of unique entries in the array is equal to the number of total entries.
new Set(Array<any>)
constructs a Set comprising unique only values. We can then transform the Set to an Array for a length comparison. See https://stackoverflow.com/a/14438954 for reference.We should also use the convention of
is
/has
(is
for singular test against a primitive,has
for plural test, like an array) prefix for a boolean function, to provide a better description for the result.Lastly, it's generally a good idea to also add tests for helper functions. If these helper functions aren't working as expected, how can we be sure that the feature under test is too?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I disagree with second sentence but I understand where problem is. Function
allEqual
(currently renamed tohasAllEqual
) works well when our goal is to check if all items are equal (it iterates over all elements and compares them to the first element, it also compares first element with itself). This is the goal when we check in tests if idempotency-keys are equal between retries (in the scope of same request).I agree this function is used in wrong way when we check if idempotency-keys are unique between requests - we expect
allEqual
to returnfalse
. Negation of this function does not guarantee that all items are unique, so this expectation will pass in case of[1,2,2,2,2]
scenario, but shouldn't.I decided to let them coexist :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
new test case - I want to make sure that idempotency key is different between requests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice catch 🎉
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great job 👏
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
new global variables - for default values as suggested in review + I decided to move string value for header key to
IDEMPOTENCY_KEY
variable (to avoid "magic strings" as it's used in multiple places)