-
Notifications
You must be signed in to change notification settings - Fork 37
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
Add wallet.sendMany
RPC
#269
Conversation
Code Climate has analyzed commit 17ac805 and detected 0 issues on this pull request. View more on Code Climate. |
Deploy Preview for jellyfish-defi ready! Built with commit 17ac805 |
await container.stop() | ||
}) | ||
|
||
// util functions NOTE(sp) : may be move to a common util file if possible ?? |
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.
yea we actually have it in @defichain/testing
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.
@surangap you can keep it in this file as it is.
for api-core
we try not to add too many test utils boilerplate (files) to keep the test scoped down for brevity. For other packages, e.g. the more complex use cases we have and uses a lot of testing utils. @canonbrother is maintaining the testing utilities now.
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.
We trying to contain the code debt so that it doesn't spaghetti around each other.
size-limit report 📦
|
Codecov Report
@@ Coverage Diff @@
## main #269 +/- ##
==========================================
+ Coverage 96.37% 96.62% +0.24%
==========================================
Files 82 87 +5
Lines 2153 2308 +155
Branches 275 297 +22
==========================================
+ Hits 2075 2230 +155
Misses 78 78
Continue to review full report at Codecov.
|
it('should getBalance >= 100', async () => { | ||
return await waitForExpect(async () => { | ||
const balance: BigNumber = await client.wallet.getBalance() | ||
expect(balance.isGreaterThan(new BigNumber('100'))).toBe(true) | ||
}) | ||
}) |
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.
this is not a part of test
suggestion here is to park this assertion on beforeAll()
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.
yes. wil do that.
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.
@surangap container has much more testing tools available now. You can take a look at those implementations and use them. If you need to add more please create PR for them.
|
||
expect(typeof transactionId).toBe('string') | ||
|
||
// NOTE(sp): How to test the effect of confTarget |
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.
perhaps try getrawtransaction
-> generate block -> getblock
with minconf
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.
@surangap btw we use this structure for TODO comments
https://github.com/DeFiCh/jellyfish/blob/main/CONTRIBUTING.md#todo-comments
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.
confTarget is likely fees testing, meaning calculate the fee that confirms in 60 blocks. But you need to create 16MB of transactions to test that. Event mainnet don't hit that cap, so you don't need to test that behavior.
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.
finish the note
to ensure the test completeness
btw like your code style
expect(utxos.length).toBe(1) | ||
utxos.forEach(utxo => { | ||
expect(utxo.address).toBe('mwsZw8nF7pKxWH8eoKL9tPxTpaFkz7QeLU') | ||
expect(utxo.amount.isEqualTo(0.00001)).toBe(true) |
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.
toStrictEqual
* Returns matching utxos for given transaction id and address. | ||
* | ||
* @param {string} txId transaction id | ||
* @param {string} address address |
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.
1 address is enough
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.
don't really need JSDoc for testing.
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.
@jingyi2811 didn't quite understand your comment. input params for the function are txId
and address
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.
It's okay. You may remove the JSDoc.
@@ -213,6 +213,42 @@ export class Wallet { | |||
async listAddressGroupings (): Promise<any[][][]> { | |||
return await this.client.call('listaddressgroupings', [], 'bignumber') | |||
} | |||
|
|||
/** | |||
* Send given amounts to multiple given address and return a transaction id |
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.
Like what you wrote in md file. Add a fullstop.
// In this case the we should only have one matching utxo | ||
expect(utxos2.length).toBe(1) | ||
utxos2.forEach(utxo => { | ||
expect(utxo.address).toBe('mswsMVsyGMj1FzDMbbxw2QW3KvQAv2FKiy') |
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.
Like what CanonBrother told me just now, change toBe to toStrictEqual
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 haven't review everything but added some comments
|
||
expect(typeof transactionId).toBe('string') | ||
|
||
// NOTE(sp): How to test the effect of confTarget |
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.
@surangap btw we use this structure for TODO comments
https://github.com/DeFiCh/jellyfish/blob/main/CONTRIBUTING.md#todo-comments
|
||
it('should sendMany with confTarget', async () => { | ||
const amounts: Record<string, number> = { mwsZw8nF7pKxWH8eoKL9tPxTpaFkz7QeLU: 0.00001, mswsMVsyGMj1FzDMbbxw2QW3KvQAv2FKiy: 0.00002 } | ||
return await waitForExpect(async () => { |
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 think we don't need to use waitForExpect
at all for sendMany
tests, our setup should be deterministic now 🤞. Previously we had mempool conflict issues and a bunch of other flaky reasons. All those are fixed now. By using waitForExpect we can't detect race conditions error which is bad.
return matchingUTXOs | ||
} | ||
|
||
//= ============================================================================================== |
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.
remove this
it('should getBalance >= 100', async () => { | ||
return await waitForExpect(async () => { | ||
const balance: BigNumber = await client.wallet.getBalance() | ||
expect(balance.isGreaterThan(new BigNumber('100'))).toBe(true) | ||
}) | ||
}) |
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.
@surangap container has much more testing tools available now. You can take a look at those implementations and use them. If you need to add more please create PR for them.
|
||
expect(typeof transactionId).toBe('string') | ||
|
||
// NOTE(sp): How to test the effect of confTarget |
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.
confTarget is likely fees testing, meaning calculate the fee that confirms in 60 blocks. But you need to create 16MB of transactions to test that. Event mainnet don't hit that cap, so you don't need to test that behavior.
* Returns matching utxos for given transaction id and address. | ||
* | ||
* @param {string} txId transaction id | ||
* @param {string} address address |
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.
don't really need JSDoc for testing.
await container.stop() | ||
}) | ||
|
||
// util functions NOTE(sp) : may be move to a common util file if possible ?? |
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.
@surangap you can keep it in this file as it is.
for api-core
we try not to add too many test utils boilerplate (files) to keep the test scoped down for brevity. For other packages, e.g. the more complex use cases we have and uses a lot of testing utils. @canonbrother is maintaining the testing utilities now.
await container.stop() | ||
}) | ||
|
||
// util functions NOTE(sp) : may be move to a common util file if possible ?? |
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.
We trying to contain the code debt so that it doesn't spaghetti around each other.
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.
1 minor change
What kind of PR is this?:
/kind feature
What this PR does / why we need it: