return correct errors to client

This commit is contained in:
Matias Alejo Garcia 2015-02-19 20:04:05 -03:00
parent f13c95be6b
commit 71d01e279f
3 changed files with 41 additions and 17 deletions

View File

@ -44,6 +44,7 @@ function _parseError(body) {
var code = body.code || 'ERROR';
var message = body.error || 'There was an unknown error processing the request';
log.error(code, message);
return {message: message, code: code};
};
function _signRequest(method, url, args, privKey) {
@ -81,7 +82,8 @@ API.prototype._tryToComplete = function(data, cb) {
return cb('Wallet Incomplete');
if (!Verifier.checkCopayers(wallet.copayers, data.walletPrivKey, data.xPrivKey, data.n))
return cb('Some copayers in the wallet could not be verified to have known the wallet secret');
return cb(new ServerCompromisedError(
'Copayers in the wallet could not be verified to have known the wallet secret'));
data.publicKeyRing = _.pluck(wallet.copayers, 'xPubKey')
@ -149,9 +151,9 @@ API.prototype._doRequest = function(method, url, args, data, cb) {
depth: 10
}));
if (err) return cb(err);
if (res.statusCode != 200) {
_parseError(body);
return cb('Request error');
return cb(_parseError(body));
}
return cb(null, body);

View File

@ -113,8 +113,8 @@ WalletUtils.UNITS = {
};
WalletUtils.parseAmount = function(text) {
if (!_.isString(text))
text = text.toString();
if (!_.isString(text))
text = text.toString();
var regex = '^(\\d*(\\.\\d{0,8})?)\\s*(' + _.keys(WalletUtils.UNITS).join('|') + ')?$';
var match = new RegExp(regex, 'i').exec(text.trim());

View File

@ -184,7 +184,7 @@ describe('client API ', function() {
should.not.exist(err);
should.exist(w.secret);
clients[4].joinWallet(w.secret, 'copayer', function(err, result) {
err.should.contain('Request error');
err.code.should.contain('WFULL');
done();
});
});
@ -192,7 +192,7 @@ describe('client API ', function() {
it('should fail with a unknown secret', function(done) {
var oldSecret = '3f8e5acb-ceeb-4aae-134f-692d934e3b1c:L2gohj8s2fLKqVU5cQutAVGciutUxczFxLxxXHFsjzLh71ZjkFQQ:T';
clients[0].joinWallet(oldSecret, 'copayer', function(err, result) {
err.should.contain('Request error');
err.code.should.contain('BADREQUEST');
done();
});
});
@ -212,7 +212,7 @@ describe('client API ', function() {
clients[1]._doGetRequest = sinon.stub().yields(null, x);
clients[1].getBalance(function(err, x) {
err.should.contain('verified');
err.code.should.contain('SERVERCOMPROMISED');
done();
});
});
@ -236,7 +236,7 @@ describe('client API ', function() {
clients[1]._doGetRequest = sinon.stub().yields(null, x);
clients[1].getBalance(function(err, x) {
err.should.contain('verified');
err.code.should.contain('SERVERCOMPROMISED');
done();
});
});
@ -264,7 +264,7 @@ describe('client API ', function() {
clients[1]._doGetRequest = sinon.stub().yields(null, x);
clients[1].getBalance(function(err, x) {
err.should.contain('verified');
err.code.should.contain('SERVERCOMPROMISED');
done();
});
});
@ -361,7 +361,7 @@ describe('client API ', function() {
});
describe('Send Transactions', function() {
describe('Transactions Signatures and Rejection', function() {
it('Send and broadcast in 1-1 wallet', function(done) {
helpers.createAndJoinWallet(clients, 1, 1, function(err, w) {
clients[0].createAddress(function(err, x0) {
@ -509,11 +509,11 @@ describe('client API ', function() {
should.not.exist(err, err);
tx.status.should.equal('pending');
clients[0].signTxProposal(x, function(err, tx) {
err.should.contain('error');
err.code.should.contain('CVOTED');
clients[1].rejectTxProposal(x, 'xx', function(err, tx) {
should.not.exist(err);
clients[1].rejectTxProposal(x, 'xx', function(err, tx) {
err.should.contain('error');
err.code.should.contain('CVOTED');
done();
});
});
@ -523,12 +523,34 @@ describe('client API ', function() {
});
});
});
});
describe('Transaction Troposals and Locked funds', function() {
it('Should not allow to propose txs if not funds are available', function(done) {
helpers.createAndJoinWallet(clients, 2, 2, function(err, w) {
clients[0].createAddress(function(err, x0) {
should.not.exist(err);
should.exist(x0.address);
blockExplorerMock.setUtxo(x0, 1, 2);
blockExplorerMock.setUtxo(x0, 1, 2);
var opts = {
amount: '1.2btc',
toAddress: 'n2TBMPzPECGUfcT2EByiTJ12TPZkhN2mN5',
message: 'hola 1-1',
};
clients[0].sendTxProposal(opts, function(err, x) {
should.not.exist(err);
clients[0].sendTxProposal(opts, function(err, x) {
err.code.should.contain('INSUFFICIENTFUNDS');
done();
});
});
});
});
});
});
/*
describe('TODO', function(x) {