mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 20:25:48 +00:00
Improve transaction-test coverage
This commit is contained in:
@@ -773,10 +773,6 @@ Transaction.prototype.payment = function(src, dst, amount) {
|
|||||||
src = options.source || options.from || options.account;
|
src = options.source || options.from || options.account;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src.invoiceID) {
|
|
||||||
this.invoiceID(src.invoiceID);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!UInt160.is_valid(src)) {
|
if (!UInt160.is_valid(src)) {
|
||||||
throw new Error('Payment source address invalid');
|
throw new Error('Payment source address invalid');
|
||||||
}
|
}
|
||||||
@@ -785,10 +781,6 @@ Transaction.prototype.payment = function(src, dst, amount) {
|
|||||||
throw new Error('Payment destination address invalid');
|
throw new Error('Payment destination address invalid');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/^[\d]+[A-Z]{3}$/.test(amount)) {
|
|
||||||
amount = Amount.from_human(amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.tx_json.TransactionType = 'Payment';
|
this.tx_json.TransactionType = 'Payment';
|
||||||
this.tx_json.Account = UInt160.json_rewrite(src);
|
this.tx_json.Account = UInt160.json_rewrite(src);
|
||||||
this.tx_json.Amount = Amount.json_rewrite(amount);
|
this.tx_json.Amount = Amount.json_rewrite(amount);
|
||||||
@@ -856,8 +848,8 @@ Transaction.prototype.submit = function(callback) {
|
|||||||
|
|
||||||
var account = this.tx_json.Account;
|
var account = this.tx_json.Account;
|
||||||
|
|
||||||
if (typeof account !== 'string') {
|
if (!UInt160.is_valid(account)) {
|
||||||
return this.emit('error', new RippleError('tejInvalidAccount', 'Account is unspecified'));
|
return this.emit('error', new RippleError('tejInvalidAccount', 'Account is missing or invalid'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// YYY Might check paths for invalid accounts.
|
// YYY Might check paths for invalid accounts.
|
||||||
@@ -866,10 +858,6 @@ Transaction.prototype.submit = function(callback) {
|
|||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
Transaction.prototype.transactionManager = function() {
|
|
||||||
return this.remote.account(this.tx_json.Account)._transactionManager;
|
|
||||||
};
|
|
||||||
|
|
||||||
Transaction.prototype.abort = function(callback) {
|
Transaction.prototype.abort = function(callback) {
|
||||||
var callback = (typeof callback === 'function') ? callback : function(){};
|
var callback = (typeof callback === 'function') ? callback : function(){};
|
||||||
if (!this.finalized) {
|
if (!this.finalized) {
|
||||||
|
|||||||
@@ -73,6 +73,61 @@ describe('Transaction', function() {
|
|||||||
assert.strictEqual(transaction.state, 'pending');
|
assert.strictEqual(transaction.state, 'pending');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Check response code is tel', function() {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
assert(!transaction.isTelLocal(-400));
|
||||||
|
assert(transaction.isTelLocal(-399));
|
||||||
|
assert(transaction.isTelLocal(-300));
|
||||||
|
assert(!transaction.isTelLocal(-299));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Check response code is tem', function() {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
assert(!transaction.isTemMalformed(-300));
|
||||||
|
assert(transaction.isTemMalformed(-299));
|
||||||
|
assert(transaction.isTemMalformed(-200));
|
||||||
|
assert(!transaction.isTemMalformed(-199));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Check response code is tef', function() {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
assert(!transaction.isTefFailure(-200));
|
||||||
|
assert(transaction.isTefFailure(-199));
|
||||||
|
assert(transaction.isTefFailure(-100));
|
||||||
|
assert(!transaction.isTefFailure(-99));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Check response code is ter', function() {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
assert(!transaction.isTerRetry(-100));
|
||||||
|
assert(transaction.isTerRetry(-99));
|
||||||
|
assert(transaction.isTerRetry(-1));
|
||||||
|
assert(!transaction.isTerRetry(0));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Check response code is tep', function() {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
assert(!transaction.isTepSuccess(-1));
|
||||||
|
assert(transaction.isTepSuccess(0));
|
||||||
|
assert(transaction.isTepSuccess(1e3));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Check response code is tec', function() {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
assert(!transaction.isTecClaimed(99));
|
||||||
|
assert(transaction.isTecClaimed(100));
|
||||||
|
assert(transaction.isTecClaimed(1e3));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Check response code is rejected', function() {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
assert(!transaction.isRejected(0));
|
||||||
|
assert(!transaction.isRejected(-99));
|
||||||
|
assert(transaction.isRejected(-100));
|
||||||
|
assert(transaction.isRejected(-399));
|
||||||
|
assert(!transaction.isRejected(-400));
|
||||||
|
});
|
||||||
|
|
||||||
it('Set state', function(done) {
|
it('Set state', function(done) {
|
||||||
var transaction = new Transaction();
|
var transaction = new Transaction();
|
||||||
transaction.state = 'pending';
|
transaction.state = 'pending';
|
||||||
@@ -153,15 +208,25 @@ describe('Transaction', function() {
|
|||||||
s3._connected = true;
|
s3._connected = true;
|
||||||
s3._load_factor = 256 * 8;
|
s3._load_factor = 256 * 8;
|
||||||
|
|
||||||
remote._servers = [ s1, s2, s3 ];
|
var s4 = new Server(remote, 'wss://s-west.ripple.com:443');
|
||||||
|
s4._connected = true;
|
||||||
|
s4._load_factor = 256 * 8;
|
||||||
|
|
||||||
|
var s5 = new Server(remote, 'wss://s-west.ripple.com:443');
|
||||||
|
s5._connected = true;
|
||||||
|
s5._load_factor = 256 * 7;
|
||||||
|
|
||||||
|
remote._servers = [ s2, s3, s1, s4 ];
|
||||||
|
|
||||||
assert.strictEqual(s1._computeFee(10), '12');
|
assert.strictEqual(s1._computeFee(10), '12');
|
||||||
assert.strictEqual(s2._computeFee(10), '48');
|
assert.strictEqual(s2._computeFee(10), '48');
|
||||||
assert.strictEqual(s3._computeFee(10), '96');
|
assert.strictEqual(s3._computeFee(10), '96');
|
||||||
|
assert.strictEqual(s4._computeFee(10), '96');
|
||||||
|
assert.strictEqual(s5._computeFee(10), '84');
|
||||||
|
|
||||||
var transaction = new Transaction(remote);
|
var transaction = new Transaction(remote);
|
||||||
|
|
||||||
assert.strictEqual(transaction._computeFee(), '48');
|
assert.strictEqual(transaction._computeFee(), '72');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Compute fee - no connected server', function() {
|
it('Compute fee - no connected server', function() {
|
||||||
@@ -245,6 +310,26 @@ describe('Transaction', function() {
|
|||||||
assert.strictEqual(transaction._computeFee(), '72');
|
assert.strictEqual(transaction._computeFee(), '72');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Complete transaction', function(done) {
|
||||||
|
var remote = new Remote();
|
||||||
|
|
||||||
|
var s1 = new Server(remote, 'wss://s-west.ripple.com:443');
|
||||||
|
s1._connected = true;
|
||||||
|
|
||||||
|
remote._servers = [ s1 ];
|
||||||
|
remote.trusted = true;
|
||||||
|
remote.local_signing = true;
|
||||||
|
|
||||||
|
var transaction = new Transaction(remote);
|
||||||
|
transaction._secret = 'sh2pTicynUEG46jjR4EoexHcQEoij';
|
||||||
|
transaction.tx_json.Account = 'rMWwx3Ma16HnqSd4H6saPisihX9aKpXxHJ';
|
||||||
|
transaction.tx_json.Flags = 0;
|
||||||
|
|
||||||
|
assert(transaction.complete());
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
it('Complete transaction - untrusted', function(done) {
|
it('Complete transaction - untrusted', function(done) {
|
||||||
var remote = new Remote();
|
var remote = new Remote();
|
||||||
var transaction = new Transaction(remote);
|
var transaction = new Transaction(remote);
|
||||||
@@ -430,6 +515,23 @@ describe('Transaction', function() {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Get hash - invalid prefix', function(done) {
|
||||||
|
var transaction = new Transaction();
|
||||||
|
transaction._secret = 'sh2pTicynUEG46jjR4EoexHcQEoij';
|
||||||
|
transaction.tx_json.SigningPubKey = '021FED5FD081CE5C4356431267D04C6E2167E4112C897D5E10335D4E22B4DA49ED';
|
||||||
|
transaction.tx_json.Account = 'rMWwx3Ma16HnqSd4H6saPisihX9aKpXxHJ';
|
||||||
|
transaction.tx_json.Flags = 0;
|
||||||
|
transaction.tx_json.Fee = 10;
|
||||||
|
transaction.tx_json.Sequence = 1;
|
||||||
|
transaction.tx_json.TransactionType = 'AccountSet';
|
||||||
|
|
||||||
|
assert.throws(function() {
|
||||||
|
transaction.hash('HASH_TX_SIGNZ');
|
||||||
|
});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
it('Get hash - complex transaction', function() {
|
it('Get hash - complex transaction', function() {
|
||||||
var input_json = {
|
var input_json = {
|
||||||
Account : 'r4qLSAzv4LZ9TLsR7diphGwKnSEAMQTSjS',
|
Account : 'r4qLSAzv4LZ9TLsR7diphGwKnSEAMQTSjS',
|
||||||
@@ -686,7 +788,7 @@ describe('Transaction', function() {
|
|||||||
{
|
{
|
||||||
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
||||||
issuer: 'rsLEU1TPdCJPPysqhWYw9jD97xtG5WqSJm',
|
issuer: 'rsLEU1TPdCJPPysqhWYw9jD97xtG5WqSJm',
|
||||||
currency: 'USD'
|
type_hex: '0000000000000001'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
||||||
@@ -705,7 +807,7 @@ describe('Transaction', function() {
|
|||||||
{
|
{
|
||||||
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
||||||
issuer: 'rsLEU1TPdCJPPysqhWYw9jD97xtG5WqSJm',
|
issuer: 'rsLEU1TPdCJPPysqhWYw9jD97xtG5WqSJm',
|
||||||
currency: 'USD'
|
type_hex: '0000000000000001'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
|
||||||
@@ -715,6 +817,10 @@ describe('Transaction', function() {
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Rewrite transaction path - invalid path', function() {
|
||||||
|
assert.strictEqual(Transaction._pathRewrite(1), void(0));
|
||||||
|
});
|
||||||
|
|
||||||
it('Add transaction path', function() {
|
it('Add transaction path', function() {
|
||||||
var transaction = new Transaction();
|
var transaction = new Transaction();
|
||||||
|
|
||||||
@@ -1231,7 +1337,6 @@ describe('Transaction', function() {
|
|||||||
|
|
||||||
it('Submit transaction', function(done) {
|
it('Submit transaction', function(done) {
|
||||||
var remote = new Remote();
|
var remote = new Remote();
|
||||||
|
|
||||||
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
|
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
|
||||||
|
|
||||||
assert.strictEqual(transaction.callback, void(0));
|
assert.strictEqual(transaction.callback, void(0));
|
||||||
@@ -1272,6 +1377,84 @@ describe('Transaction', function() {
|
|||||||
assert.strictEqual(typeof transaction._errorHandler, 'function');
|
assert.strictEqual(typeof transaction._errorHandler, 'function');
|
||||||
assert.strictEqual(typeof transaction._successHandler, 'function');
|
assert.strictEqual(typeof transaction._successHandler, 'function');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Submit transaction - submission error', function(done) {
|
||||||
|
var remote = new Remote();
|
||||||
|
|
||||||
|
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
|
||||||
|
|
||||||
|
var account = remote.addAccount('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
|
||||||
|
|
||||||
|
account._transactionManager._nextSequence = 1;
|
||||||
|
|
||||||
|
account._transactionManager._request = function(tx) {
|
||||||
|
tx.emit('error', new Error('Test error'));
|
||||||
|
};
|
||||||
|
|
||||||
|
transaction.complete = function() {
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
var receivedError = false;
|
||||||
|
|
||||||
|
transaction.once('error', function() {
|
||||||
|
receivedError = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
function submitCallback(err, res) {
|
||||||
|
setImmediate(function() {
|
||||||
|
assert(err);
|
||||||
|
assert.strictEqual(err.constructor.name, 'RippleError');
|
||||||
|
assert(receivedError);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
transaction.submit(submitCallback);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Submit transaction - invalid account', function(done) {
|
||||||
|
var remote = new Remote();
|
||||||
|
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
|
||||||
|
|
||||||
|
transaction.tx_json.Account += 'z';
|
||||||
|
|
||||||
|
transaction.once('error', function(err) {
|
||||||
|
assert.strictEqual(err.result, 'tejInvalidAccount');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
transaction.submit();
|
||||||
|
});
|
||||||
|
|
||||||
|
it.skip('Abort submission', function(done) {
|
||||||
|
var remote = new Remote();
|
||||||
|
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
|
||||||
|
var account = remote.addAccount('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
|
||||||
|
|
||||||
|
account._transactionManager._nextSequence = 1;
|
||||||
|
|
||||||
|
account._transactionManager._request = function(tx) {
|
||||||
|
setTimeout(function() {
|
||||||
|
tx.emit('success', { });
|
||||||
|
}, 20);
|
||||||
|
};
|
||||||
|
|
||||||
|
transaction.complete = function() {
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
function submitCallback(err, res) {
|
||||||
|
setImmediate(function() {
|
||||||
|
assert(err);
|
||||||
|
assert.strictEqual(err.result, 'tejAbort');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
transaction.submit(submitCallback);
|
||||||
|
transaction.abort();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// vim:sw=2:sts=2:ts=8:et
|
// vim:sw=2:sts=2:ts=8:et
|
||||||
|
|||||||
Reference in New Issue
Block a user