mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-23 21:55:48 +00:00
Merge pull request #535 from clark800/submit-error
Return promise error if submit result is an immediate failure
This commit is contained in:
@@ -1,10 +1,27 @@
|
|||||||
/* @flow */
|
/* @flow */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
const _ = require('lodash');
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
const validate = utils.common.validate;
|
const validate = utils.common.validate;
|
||||||
const Request = utils.common.core.Request;
|
const Request = utils.common.core.Request;
|
||||||
const convertErrors = utils.common.convertErrors;
|
const convertErrors = utils.common.convertErrors;
|
||||||
|
|
||||||
|
function isImmediateRejection(engineResult) {
|
||||||
|
return _.startsWith(engineResult, 'tel')
|
||||||
|
|| _.startsWith(engineResult, 'tem')
|
||||||
|
|| _.startsWith(engineResult, 'tej');
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertSubmitErrors(callback) {
|
||||||
|
return function(error, data) {
|
||||||
|
if (isImmediateRejection(data.engineResult)) {
|
||||||
|
callback(new utils.common.errors.RippleError('Submit failed'), data);
|
||||||
|
} else {
|
||||||
|
callback(error, data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function submitAsync(txBlob: string, callback: (err: any, data: any) => void
|
function submitAsync(txBlob: string, callback: (err: any, data: any) => void
|
||||||
): void {
|
): void {
|
||||||
validate.blob(txBlob);
|
validate.blob(txBlob);
|
||||||
@@ -13,7 +30,7 @@ function submitAsync(txBlob: string, callback: (err: any, data: any) => void
|
|||||||
request.request(null,
|
request.request(null,
|
||||||
utils.common.composeAsync(
|
utils.common.composeAsync(
|
||||||
data => utils.common.convertKeysFromSnakeCaseToCamelCase(data),
|
data => utils.common.convertKeysFromSnakeCaseToCamelCase(data),
|
||||||
convertErrors(callback)));
|
convertSubmitErrors(convertErrors(callback))));
|
||||||
}
|
}
|
||||||
|
|
||||||
function submit(txBlob: string) {
|
function submit(txBlob: string) {
|
||||||
|
|||||||
@@ -155,6 +155,14 @@ describe('RippleAPI', function() {
|
|||||||
_.partial(checkResult, responses.submit, 'submit'));
|
_.partial(checkResult, responses.submit, 'submit'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('submit - failure', function() {
|
||||||
|
return this.api.submit('BAD').then(() => {
|
||||||
|
assert(false, 'Should throw RippleError');
|
||||||
|
}).catch(error => {
|
||||||
|
assert(error instanceof this.api.errors.RippleError);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('getBalances', function() {
|
it('getBalances', function() {
|
||||||
return this.api.getBalances(address).then(
|
return this.api.getBalances(address).then(
|
||||||
_.partial(checkResult, responses.getBalances, 'getBalances'));
|
_.partial(checkResult, responses.getBalances, 'getBalances'));
|
||||||
|
|||||||
5
test/fixtures/api/rippled/index.js
vendored
5
test/fixtures/api/rippled/index.js
vendored
@@ -1,7 +1,10 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
submit: require('./submit'),
|
submit: {
|
||||||
|
success: require('./submit'),
|
||||||
|
failure: require('./submit-failed')
|
||||||
|
},
|
||||||
ledger: require('./ledger'),
|
ledger: require('./ledger'),
|
||||||
ledgerNotFound: require('./ledger-not-found'),
|
ledgerNotFound: require('./ledger-not-found'),
|
||||||
ledgerWithoutCloseTime: require('./ledger-without-close-time'),
|
ledgerWithoutCloseTime: require('./ledger-without-close-time'),
|
||||||
|
|||||||
13
test/fixtures/api/rippled/submit-failed.json
vendored
Normal file
13
test/fixtures/api/rippled/submit-failed.json
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"status": "success",
|
||||||
|
"type": "response",
|
||||||
|
"result": {
|
||||||
|
"success": false,
|
||||||
|
"engine_result": "temBAD_FEE",
|
||||||
|
"engine_result_code": 1,
|
||||||
|
"engine_result_message": "",
|
||||||
|
"tx_blob": "12000322000000002400000017201B0086955468400000000000000C732102F89EAEC7667B30F33D0687BBA86C3FE2A08CCA40A9186C5BDE2DAA6FA97A37D87446304402207660BDEF67105CE1EBA9AD35DC7156BAB43FF1D47633199EE257D70B6B9AAFBF02207F5517BC8AEF2ADC1325897ECDBA8C673838048BCA62F4E98B252F19BE88796D770A726970706C652E636F6D81144FBFF73DA4ECF9B701940F27341FA8020C313443",
|
||||||
|
"tx_json": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -205,7 +205,11 @@ module.exports = function(port) {
|
|||||||
|
|
||||||
mock.on('request_submit', function(request, conn) {
|
mock.on('request_submit', function(request, conn) {
|
||||||
assert.strictEqual(request.command, 'submit');
|
assert.strictEqual(request.command, 'submit');
|
||||||
conn.send(createResponse(request, fixtures.submit));
|
if (request.tx_blob === 'BAD') {
|
||||||
|
conn.send(createResponse(request, fixtures.submit.failure));
|
||||||
|
} else {
|
||||||
|
conn.send(createResponse(request, fixtures.submit.success));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mock.on('request_account_lines', function(request, conn) {
|
mock.on('request_account_lines', function(request, conn) {
|
||||||
|
|||||||
Reference in New Issue
Block a user