From c073c2b7defed91b767e61c77e1c017ced52f9be Mon Sep 17 00:00:00 2001 From: Chris Clark Date: Wed, 15 Jul 2015 16:09:26 -0700 Subject: [PATCH] Add getAccountInfo method and unit test --- src/api/common/schemas/settings-options.json | 2 +- src/api/common/validate.js | 1 + src/api/index.js | 2 ++ src/api/ledger/accountinfo.js | 32 ++++++++++++++++++++ test/api-test.js | 6 ++++ test/fixtures/account-info-response.json | 7 +++++ 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/api/ledger/accountinfo.js create mode 100644 test/fixtures/account-info-response.json diff --git a/src/api/common/schemas/settings-options.json b/src/api/common/schemas/settings-options.json index 96988cbc..eca8136c 100644 --- a/src/api/common/schemas/settings-options.json +++ b/src/api/common/schemas/settings-options.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-04/schema#", "title": "settings-options", - "description": "Options for getSettings", + "description": "Options for getSettings and getAccountInfo", "type": "object", "properties": { "ledgerVersion": {"$ref": "ledgerVersion"} diff --git a/src/api/common/validate.js b/src/api/common/validate.js index 6f7b5643..384c8add 100644 --- a/src/api/common/validate.js +++ b/src/api/common/validate.js @@ -54,6 +54,7 @@ module.exports = { blob: _.partial(schemaValidate, 'blob'), getTransactionsOptions: _.partial(validateOptions, 'transactions-options'), getSettingsOptions: _.partial(validateOptions, 'settings-options'), + getAccountInfoOptions: _.partial(validateOptions, 'settings-options'), getTrustlinesOptions: _.partial(validateOptions, 'trustlines-options'), getBalancesOptions: _.partial(validateOptions, 'trustlines-options'), getOrdersOptions: _.partial(validateOptions, 'orders-options'), diff --git a/src/api/index.js b/src/api/index.js index 5a5703bc..756122de 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -16,6 +16,7 @@ const getPaths = require('./ledger/pathfind'); const getOrders = require('./ledger/orders'); const getOrderbook = require('./ledger/orderbook'); const getSettings = require('./ledger/settings'); +const getAccountInfo = require('./ledger/accountinfo'); const preparePayment = require('./transaction/payment'); const prepareTrustline = require('./transaction/trustline'); const prepareOrder = require('./transaction/order'); @@ -48,6 +49,7 @@ RippleAPI.prototype = { getOrders, getOrderbook, getSettings, + getAccountInfo, preparePayment, prepareTrustline, diff --git a/src/api/ledger/accountinfo.js b/src/api/ledger/accountinfo.js new file mode 100644 index 00000000..687534b1 --- /dev/null +++ b/src/api/ledger/accountinfo.js @@ -0,0 +1,32 @@ +'use strict'; +const utils = require('./utils'); +const removeUndefined = require('./parse/utils').removeUndefined; +const validate = utils.common.validate; +const composeAsync = utils.common.composeAsync; + +function formatAccountInfo(response) { + const data = response.account_data; + return removeUndefined({ + sequence: data.Sequence, + xrpBalance: utils.common.dropsToXrp(data.Balance), + ownerCount: data.OwnerCount, + previousInitiatedTransactionID: data.AccountTxnID, + previousAffectingTransactionID: data.PreviousTxnID, + previousAffectingTransactionLedgerVersion: data.PreviousTxnLgrSeq + }); +} + +function getAccountInfo(account, options, callback) { + validate.address(account); + validate.getAccountInfoOptions(options); + + const request = { + account: account, + ledger: options.ledgerVersion + }; + + this.remote.requestAccountInfo(request, + composeAsync(formatAccountInfo, callback)); +} + +module.exports = utils.wrapCatch(getAccountInfo); diff --git a/test/api-test.js b/test/api-test.js index 781b83be..887266cd 100644 --- a/test/api-test.js +++ b/test/api-test.js @@ -16,6 +16,7 @@ const orderCancellationResponse = require('./fixtures/ordercancellation-response'); const settingsSpecification = require('./fixtures/settings-specification'); const settingsResponse = require('./fixtures/settings-response'); +const getAccountInfoResponse = require('./fixtures/account-info-response'); const regularKeyResponse = require('./fixtures/regular-key-response'); const signInput = require('./fixtures/sign-input'); const signOutput = require('./fixtures/sign-output'); @@ -163,6 +164,11 @@ describe('RippleAPI', function() { _.partial(checkResult, getSettingsResponse, done)); }); + it('getAccountInfo', function(done) { + this.api.getAccountInfo(address, {}, + _.partial(checkResult, getAccountInfoResponse, done)); + }); + it('getOrders', function(done) { this.api.getOrders(address, {}, _.partial(checkResult, getOrdersResponse, done)); diff --git a/test/fixtures/account-info-response.json b/test/fixtures/account-info-response.json new file mode 100644 index 00000000..4a31ea19 --- /dev/null +++ b/test/fixtures/account-info-response.json @@ -0,0 +1,7 @@ +{ + "sequence": 23, + "xrpBalance": "922.913243", + "ownerCount": 1, + "previousAffectingTransactionID": "19899273706A9E040FDB5885EE991A1DC2BAD878A0D6E7DBCFB714E63BF737F7", + "previousAffectingTransactionLedgerVersion": 6614625 +}