From a55d26a7267c4cca10f8659364404156eb3e6644 Mon Sep 17 00:00:00 2001 From: Ivan Tivonenko Date: Wed, 19 Aug 2015 04:36:18 +0300 Subject: [PATCH] fix parseTrustline for case when no QualityIn or QualityOut are set in transaction --- src/api/ledger/parse/trustline.js | 7 ++- test/api-test.js | 8 +++ .../get-transaction-trust-no-quality.json | 27 ++++++++++ test/fixtures/api/responses/index.js | 1 + test/fixtures/api/rippled/index.js | 1 + .../api/rippled/tx/trust-set-no-quality.json | 51 +++++++++++++++++++ test/mock-rippled.js | 3 ++ 7 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/api/responses/get-transaction-trust-no-quality.json create mode 100644 test/fixtures/api/rippled/tx/trust-set-no-quality.json diff --git a/src/api/ledger/parse/trustline.js b/src/api/ledger/parse/trustline.js index 1a413e2f..9a592c90 100644 --- a/src/api/ledger/parse/trustline.js +++ b/src/api/ledger/parse/trustline.js @@ -15,8 +15,11 @@ function parseFlag(flagsValue, trueValue, falseValue) { return undefined; } -function parseQuality(quality) { - return (new BigNumber(quality)).shift(-9).toNumber(); +function parseQuality(quality?: number) { + if (typeof quality === 'number') { + return (new BigNumber(quality)).shift(-9).toNumber(); + } + return undefined; } function parseTrustline(tx: Object): Object { diff --git a/test/api-test.js b/test/api-test.js index 0bd81dfa..39b3561d 100644 --- a/test/api-test.js +++ b/test/api-test.js @@ -204,6 +204,14 @@ describe('RippleAPI', function() { 'getTransaction')); }); + it('getTransaction - trustline no quality', function() { + const hash = + 'BAF1C678323C37CCB7735550C379287667D8288C30F83148AD3C1CB019FC9002'; + return this.api.getTransaction(hash).then( + _.partial(checkResult, responses.getTransaction.trustlineNoQuality, + 'getTransaction')); + }); + it('getTransaction - not validated', function() { const hash = '4FB3ADF22F3C605E23FAEFAA185F3BD763C4692CAC490D9819D117CD33BFAA10'; diff --git a/test/fixtures/api/responses/get-transaction-trust-no-quality.json b/test/fixtures/api/responses/get-transaction-trust-no-quality.json new file mode 100644 index 00000000..3f126bc7 --- /dev/null +++ b/test/fixtures/api/responses/get-transaction-trust-no-quality.json @@ -0,0 +1,27 @@ +{ + "type": "trustline", + "address": "r9UHu5CWni1qRY7Q4CfFZLGvXo2pGQy96b", + "sequence": 245, + "id": "BAF1C678323C37CCB7735550C379287667D8288C30F83148AD3C1CB019FC9002", + "specification": { + "limit": "1", + "currency": "USD", + "counterparty": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" + }, + "outcome": { + "result": "tesSUCCESS", + "timestamp": "2015-07-08T20:29:20.000Z", + "fee": "0.012", + "balanceChanges": { + "r9UHu5CWni1qRY7Q4CfFZLGvXo2pGQy96b": [ + { + "currency": "XRP", + "value": "-0.012" + } + ] + }, + "orderbookChanges": {}, + "ledgerVersion": 14518100, + "indexInLedger": 1 + } +} diff --git a/test/fixtures/api/responses/index.js b/test/fixtures/api/responses/index.js index 7ea9e488..c693434c 100644 --- a/test/fixtures/api/responses/index.js +++ b/test/fixtures/api/responses/index.js @@ -23,6 +23,7 @@ module.exports = { trackingOff: require('./get-transaction-settings-tracking-off.json'), setRegularKey: require('./get-transaction-settings-set-regular-key.json'), trustlineFrozenOff: require('./get-transaction-trust-set-frozen-off.json'), + trustlineNoQuality: require('./get-transaction-trust-no-quality.json'), notValidated: require('./get-transaction-not-validated.json') }, getTransactions: require('./get-transactions.json'), diff --git a/test/fixtures/api/rippled/index.js b/test/fixtures/api/rippled/index.js index 88312022..27b3920e 100644 --- a/test/fixtures/api/rippled/index.js +++ b/test/fixtures/api/rippled/index.js @@ -31,6 +31,7 @@ module.exports = { OfferCancel: require('./tx/offer-cancel.json'), TrustSet: require('./tx/trust-set.json'), TrustSetFrozenOff: require('./tx/trust-set-frozen-off.json'), + TrustSetNoQuality: require('./tx/trust-set-no-quality.json'), NotFound: require('./tx/not-found.json'), NoLedgerIndex: require('./tx/no-ledger-index.json'), NoLedgerFound: require('./tx/no-ledger-found.json'), diff --git a/test/fixtures/api/rippled/tx/trust-set-no-quality.json b/test/fixtures/api/rippled/tx/trust-set-no-quality.json new file mode 100644 index 00000000..10febb98 --- /dev/null +++ b/test/fixtures/api/rippled/tx/trust-set-no-quality.json @@ -0,0 +1,51 @@ +{ + "id": 0, + "result": { + "Account": "r9UHu5CWni1qRY7Q4CfFZLGvXo2pGQy96b", + "Fee": "12000", + "Flags": 0, + "LastLedgerSequence": 14518103, + "LimitAmount": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "1" + }, + "Sequence": 245, + "SigningPubKey": "036A749E3B7187E43E8936E3D83A7030989325249E03803F12B7F64BAACABA6025", + "TransactionType": "TrustSet", + "TxnSignature": "3045022100AFE1ADDA62C7604495C8CBBE8308471E9F55C7D646571621541F6E1B66BA1EE30220108E914EB9DF876E9B525ADDBDD378DFFDEDF72CD9030FE76909CA2CE73FAA6D", + "date": 489702560, + "hash": "BAF1C678323C37CCB7735550C379287667D8288C30F83148AD3C1CB019FC9002", + "inLedger": 14518100, + "ledger_index": 14518100, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "r9UHu5CWni1qRY7Q4CfFZLGvXo2pGQy96b", + "Balance": "44491746", + "Domain": "726970706C652E636F6D", + "Flags": 0, + "OwnerCount": 4, + "Sequence": 246 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "4AD70690C6FF8A069F8AE00B09F70E9B732360026E8085050D314432091A59C9", + "PreviousFields": { + "Balance": "44503746", + "Sequence": 245 + }, + "PreviousTxnID": "7ACFD6E9A0EC17A9872212D81788658C886A19EF5D6CA9737241D91953E588CD", + "PreviousTxnLgrSeq": 14518099 + } + } + ], + "TransactionIndex": 1, + "TransactionResult": "tesSUCCESS" + }, + "validated": true + }, + "status": "success", + "type": "response" +} diff --git a/test/mock-rippled.js b/test/mock-rippled.js index 21c74823..c60515ef 100644 --- a/test/mock-rippled.js +++ b/test/mock-rippled.js @@ -190,6 +190,9 @@ module.exports = function(port) { } else if (request.transaction === 'FE72FAD0FA7CA904FB6C633A1666EDF0B9C73B2F5A4555D37EEF2739A78A531B') { conn.send(createResponse(request, fixtures.tx.TrustSetFrozenOff)); + } else if (request.transaction === + 'BAF1C678323C37CCB7735550C379287667D8288C30F83148AD3C1CB019FC9002') { + conn.send(createResponse(request, fixtures.tx.TrustSetNoQuality)); } else if (request.transaction === '4FB3ADF22F3C605E23FAEFAA185F3BD763C4692CAC490D9819D117CD33BFAA10') { conn.send(createResponse(request, fixtures.tx.NotValidated));