mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-18 18:15:50 +00:00
Add quality to account_offers
This commit is contained in:
committed by
Vinnie Falco
parent
361f1da5b8
commit
d8d51e8103
@@ -23,6 +23,19 @@
|
||||
|
||||
namespace ripple {
|
||||
|
||||
void appendOfferJson (std::shared_ptr<SLE const> const& offer,
|
||||
Json::Value& offers)
|
||||
{
|
||||
STAmount dirRate = amountFromQuality (
|
||||
getQuality (offer->getFieldH256 (sfBookDirectory)));
|
||||
Json::Value& obj (offers.append (Json::objectValue));
|
||||
offer->getFieldAmount (sfTakerPays).setJson (obj[jss::taker_pays]);
|
||||
offer->getFieldAmount (sfTakerGets).setJson (obj[jss::taker_gets]);
|
||||
obj[jss::seq] = offer->getFieldU32 (sfSequence);
|
||||
obj[jss::flags] = offer->getFieldU32 (sfFlags);
|
||||
obj[jss::quality] = dirRate.getText ();
|
||||
};
|
||||
|
||||
// {
|
||||
// account: <account>|<account_public_key>
|
||||
// ledger_hash : <ledger>
|
||||
@@ -105,14 +118,8 @@ Json::Value doAccountOffers (RPC::Context& context)
|
||||
}
|
||||
|
||||
startHint = sleOffer->getFieldU64(sfOwnerNode);
|
||||
|
||||
// Caller provided the first offer (startAfter), add it as first result
|
||||
Json::Value& obj (jsonOffers.append (Json::objectValue));
|
||||
sleOffer->getFieldAmount (sfTakerPays).setJson (obj[jss::taker_pays]);
|
||||
sleOffer->getFieldAmount (sfTakerGets).setJson (obj[jss::taker_gets]);
|
||||
obj[jss::seq] = sleOffer->getFieldU32 (sfSequence);
|
||||
obj[jss::flags] = sleOffer->getFieldU32 (sfFlags);
|
||||
|
||||
appendOfferJson(sleOffer, jsonOffers);
|
||||
offers.reserve (reserve);
|
||||
}
|
||||
else
|
||||
@@ -150,11 +157,7 @@ Json::Value doAccountOffers (RPC::Context& context)
|
||||
|
||||
for (auto const& offer : offers)
|
||||
{
|
||||
Json::Value& obj (jsonOffers.append (Json::objectValue));
|
||||
offer->getFieldAmount (sfTakerPays).setJson (obj[jss::taker_pays]);
|
||||
offer->getFieldAmount (sfTakerGets).setJson (obj[jss::taker_gets]);
|
||||
obj[jss::seq] = offer->getFieldU32 (sfSequence);
|
||||
obj[jss::flags] = offer->getFieldU32 (sfFlags);
|
||||
appendOfferJson(offer, jsonOffers);
|
||||
}
|
||||
|
||||
context.loadType = Resource::feeMediumBurdenRPC;
|
||||
|
||||
91
test/account_offers-test.js
Normal file
91
test/account_offers-test.js
Normal file
@@ -0,0 +1,91 @@
|
||||
/* -------------------------------- REQUIRES -------------------------------- */
|
||||
|
||||
var assert = require('assert-diff');
|
||||
var lodash = require('lodash');
|
||||
|
||||
var testutils = require('./testutils');
|
||||
var LedgerState = require('./ledger-state').LedgerState;
|
||||
|
||||
var config = testutils.init_config();
|
||||
// We just use equal instead of strictEqual everywhere.
|
||||
assert.options.strict = true;
|
||||
|
||||
/* ---------------------------------- TEST ---------------------------------- */
|
||||
|
||||
function makeSuite(name, ledger_state, tests) {
|
||||
suite(name, function() {
|
||||
// build_(setup|teardown) utils functions set state on this context var.
|
||||
var context = {};
|
||||
|
||||
// This runs only once
|
||||
suiteSetup(function(done) {
|
||||
testutils.build_setup().call(context, function() {
|
||||
var ledger = new LedgerState(ledger_state,
|
||||
assert, context.remote,
|
||||
config);
|
||||
// Run the ledger setup util. This compiles the declarative description
|
||||
// into a series of transactions and executes them.
|
||||
ledger.setup(lodash.noop /*logger*/, function(){
|
||||
done();
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
suiteTeardown(function(done) {
|
||||
testutils.build_teardown().call(context, done);
|
||||
});
|
||||
|
||||
lodash.forOwn(tests, function(func, name) {
|
||||
test(name, function(done) {
|
||||
func.call(this, context.remote, context, done);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
makeSuite (
|
||||
'account_offers',
|
||||
{
|
||||
accounts: {
|
||||
G1 : {balance: ["1000.0"]},
|
||||
|
||||
bob : {
|
||||
balance: ["1000.0", "1000/USD/G1"],
|
||||
// these offers will be in `Sequence`
|
||||
offers: [["100.0", "1/USD/bob"],
|
||||
["100.0", "1/USD/G1"],
|
||||
["10.0", "2/USD/G1"]]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
quality: function(remote, _, done) {
|
||||
remote.requestAccountOffers({account: 'bob'}, function(err, response) {
|
||||
var expected = [
|
||||
{"flags": 65536,
|
||||
"quality": "100000000",
|
||||
"seq": 3,
|
||||
"taker_gets": {"currency": "USD",
|
||||
"issuer": "rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK",
|
||||
"value": "1"},
|
||||
"taker_pays": "100000000"},
|
||||
{"flags": 65536,
|
||||
"quality": "100000000",
|
||||
"seq": 4,
|
||||
"taker_gets": {"currency": "USD",
|
||||
"issuer": "r32rQHyesiTtdWFU7UJVtff4nCR5SHCbJW",
|
||||
"value": "1"},
|
||||
"taker_pays": "100000000"},
|
||||
{"flags": 65536,
|
||||
"quality": "5000000",
|
||||
"seq": 5,
|
||||
"taker_gets": {"currency": "USD",
|
||||
"issuer": "r32rQHyesiTtdWFU7UJVtff4nCR5SHCbJW",
|
||||
"value": "2"},
|
||||
"taker_pays": "10000000"}];
|
||||
|
||||
assert.deepEqual(response.offers, expected);
|
||||
done();
|
||||
});
|
||||
}}
|
||||
);
|
||||
Reference in New Issue
Block a user