diff --git a/js/models/core/TxProposals.js b/js/models/core/TxProposals.js index 83945b7b3..2851abf36 100644 --- a/js/models/core/TxProposals.js +++ b/js/models/core/TxProposals.js @@ -181,6 +181,7 @@ TxProposals.prototype.merge = function(inTxp) { var v1 = inTxp; ret = v0.merge(v1); } else { + this.txps[ntxid] = inTxp; ret.hasChanged = true; ret.events.push({ type: 'new', diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index 6d415ea56..b997913a6 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -366,6 +366,7 @@ Wallet.prototype.sendAllTxProposals = function(recipients) { Wallet.prototype.sendTxProposal = function(ntxid, recipients) { preconditions.checkArgument(ntxid); + preconditions.checkState(this.txProposals.txps[ntxid]); this.log('### SENDING txProposal '+ntxid+' TO:', recipients || 'All', this.txProposals); this.network.send(recipients, { type: 'txProposal', @@ -437,8 +438,8 @@ Wallet.prototype.generateAddress = function(isChange, cb) { Wallet.prototype.getTxProposals = function() { var ret = []; var copayers = this.getRegisteredCopayerIds(); - for (var k in this.txProposals.txps) { - var txp = this.txProposals.getTxProposal(k, copayers); + for (var ntxid in this.txProposals.txps) { + var txp = this.txProposals.getTxProposal(ntxid, copayers); txp.signedByUs = txp.signedBy[this.getMyCopayerId()] ? true : false; txp.rejectedByUs = txp.rejectedBy[this.getMyCopayerId()] ? true : false; if (this.totalCopayers - txp.rejectCount < this.requiredCopayers) { diff --git a/test/test.Wallet.js b/test/test.Wallet.js index 60a4dfe7d..bfb333ef6 100644 --- a/test/test.Wallet.js +++ b/test/test.Wallet.js @@ -361,7 +361,7 @@ describe('Wallet model', function() { it('handle network txProposals correctly', function() { var w = createW(); - var txps = { + var txp = { 'txProposal': { "seenBy": { "undefined": 1402337282806 @@ -403,7 +403,7 @@ describe('Wallet model', function() { } } }; - w._handleTxProposal('senderID', txps, true); + w._handleTxProposal('senderID', txp, true); Object.keys(w.txProposals.txps).length.should.equal(1); w.getTxProposals().length.should.equal(1); }); @@ -592,9 +592,21 @@ describe('Wallet model', function() { var utxo = createUTXO(w); w.blockchain.fixUnspent(utxo); w.createTx(toAddress, amountSatStr, null, function(ntxid) { - w.sendTxProposal.should.throw('Illegal Argument.'); + w.sendTxProposal.bind(w).should.throw('Illegal Argument.'); (function() { - w.sendTxProposal(ntxid) + w.sendTxProposal(ntxid); + }).should.not.throw(); + done(); + }); + }); + it('should send all TxProposal', function(done) { + var w = createW2(); + var utxo = createUTXO(w); + w.blockchain.fixUnspent(utxo); + w.createTx(toAddress, amountSatStr, null, function(ntxid) { + w.sendAllTxProposals.bind(w).should.not.throw(); + (function() { + w.sendAllTxProposals(); }).should.not.throw(); done(); });