diff --git a/js/models/Wallet.js b/js/models/Wallet.js index 99f9cd80e..b54be9e19 100644 --- a/js/models/Wallet.js +++ b/js/models/Wallet.js @@ -2168,8 +2168,8 @@ Wallet.prototype.removeTxWithSpentInputs = function(cb) { * spend * * @desc Spends coins from the wallet - * Create a Transaction Proposal and broadcast it or send it - * to copayers + * Create a Transaction Proposal and send it + * to copayers (broadcast it in a 1-x wallet) * @param {object} opts * @param {string} opts.toAddress address to send coins * @param {number} opts.amountSat amount in satoshis @@ -2231,6 +2231,7 @@ Wallet.prototype.spend = function(opts, cb) { log.debug('TXP Added: ', ntxid); +console.log('[Wallet.js.2233]'); //TODO self.sendIndexes(); // Needs only one signature? Broadcast it! if (!self.requiresMultipleSignatures()) { diff --git a/karma.conf.js b/karma.conf.js index da06fc59c..84647dae2 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -56,7 +56,6 @@ module.exports = function(config) { 'js/init.js', 'test/mocks/FakeBlockchainSocket.js', - 'test/mocks/FakePayProServer.js', 'test/mocha.conf.js', diff --git a/test/TxProposal.js b/test/TxProposal.js index 881677f34..c1b69a5ac 100644 --- a/test/TxProposal.js +++ b/test/TxProposal.js @@ -10,17 +10,23 @@ var util = bitcore.util; var networks = bitcore.networks; var FakeBuilder = requireMock('FakeBuilder'); var TxProposal = copay.TxProposal; - -var dummyProposal = function() { return new TxProposal({ - creator: 'creator', - createdTs: 1, - builder: new FakeBuilder(), - inputChainPaths: ['m/1'], -})}; +var Buffer = bitcore.Buffer; var someKeys = ["03b39d61dc9a504b13ae480049c140dcffa23a6cc9c09d12d6d1f332fee5e18ca5", "022929f515c5cf967474322468c3bd945bb6f281225b2c884b465680ef3052c07e"]; describe('TxProposal', function() { + + function dummyProposal() { + return new TxProposal({ + creator: 'creator', + createdTs: 1, + builder: new FakeBuilder(), + inputChainPaths: ['m/1'], + }) + }; + + + describe('new', function() { it('should fail to create an instance with wrong arguments', function() { @@ -351,13 +357,13 @@ describe('TxProposal', function() { txp.addMerchantData(md); }).should.throw('expired'); }); - + it('OK Expired but sent', function() { md.expires = 2; txp.sentTs = 1; txp.addMerchantData(md); }); - + }); describe('#merge', function() { diff --git a/test/unit/controllers/controllersSpec.js b/test/unit/controllers/controllersSpec.js index 3dc682211..1343b5ef1 100644 --- a/test/unit/controllers/controllersSpec.js +++ b/test/unit/controllers/controllersSpec.js @@ -12,12 +12,16 @@ saveAs = function(blob, filename) { }; }; -var startServer = require('../../mocks/FakePayProServer'); - describe("Unit: Controllers", function() { config.plugins.LocalStorage = true; config.plugins.GoogleDrive = null; + var anAddr = 'mkfTyEk7tfgV611Z4ESwDDSZwhsZdbMpVy'; + var anAmount = 1000; + var aComment = 'hola'; + + + var invalidForm = { $invalid: true }; @@ -69,24 +73,30 @@ describe("Unit: Controllers", function() { w.getTransactionHistory = sinon.stub().yields(null); w.getNetworkName = sinon.stub().returns('testnet'); - w.createTx = sinon.stub().yields(null); - w.sendTx = sinon.stub().yields(null); + w.spend = sinon.stub().yields(null); + w.sendTxProposal = sinon.stub(); + w.broadcastTx = sinon.stub().yields(null); w.requiresMultipleSignatures = sinon.stub().returns(true); w.getTxProposals = sinon.stub().returns([1, 2, 3]); w.getPendingTxProposals = sinon.stub().returns({ - txs : [{ isPending : true }], + txs: [{ + isPending: true + }], pendingForUs: 1 }); w.getId = sinon.stub().returns(1234); - w.on = sinon.stub().yields({'e': 'errmsg', 'loading': false}); + w.on = sinon.stub().yields({ + 'e': 'errmsg', + 'loading': false + }); w.getBalance = sinon.stub().returns(10000); w.publicKeyRing = sinon.stub().yields(null); w.publicKeyRing.nicknameForCopayer = sinon.stub().returns('nickcopayer'); w.updateFocusedTimestamp = sinon.stub().returns(1415804323); - w.getAddressesInfo = sinon.stub().returns([ - { addressStr: "2MxvwvfshZxw4SkkaJZ8NDKLyepa9HLMKtu", - isChange: false } - ]); + w.getAddressesInfo = sinon.stub().returns([{ + addressStr: "2MxvwvfshZxw4SkkaJZ8NDKLyepa9HLMKtu", + isChange: false + }]); var iden = {}; iden.deleteWallet = sinon.stub().yields(null); @@ -240,31 +250,35 @@ describe("Unit: Controllers", function() { }); it('should create a transaction proposal with given values', function() { - sendForm.address.$setViewValue('mkfTyEk7tfgV611Z4ESwDDSZwhsZdbMpVy'); - sendForm.amount.$setViewValue(1000); + sendForm.address.$setViewValue(anAddr); + sendForm.amount.$setViewValue(anAmount); + sendForm.comment.$setViewValue(aComment); scope.loadTxs = sinon.spy(); var w = scope.wallet; scope.submitForm(sendForm); - sinon.assert.callCount(w.createTx, 1); - sinon.assert.callCount(w.sendTx, 0); + sinon.assert.callCount(w.spend, 1); + sinon.assert.callCount(w.broadcastTx, 0); sinon.assert.callCount(scope.loadTxs, 1); - w.createTx.getCall(0).args[0].should.equal('mkfTyEk7tfgV611Z4ESwDDSZwhsZdbMpVy'); - w.createTx.getCall(0).args[1].should.equal(1000 * scope.wallet.settings.unitToSatoshi); - (typeof w.createTx.getCall(0).args[2]).should.equal('undefined'); + var spendArgs = w.spend.getCall(0).args[0]; + spendArgs.toAddress.should.equal(anAddr); + spendArgs.amountSat.should.equal(anAmount * scope.wallet.settings.unitToSatoshi); + spendArgs.comment.should.equal(aComment); }); it('should handle big values in 100 BTC', function() { var old = scope.wallet.settings.unitToSatoshi; scope.wallet.settings.unitToSatoshi = 100000000;; - sendForm.address.$setViewValue('mkfTyEk7tfgV611Z4ESwDDSZwhsZdbMpVy'); + sendForm.address.$setViewValue(anAddr); sendForm.amount.$setViewValue(100); + sendForm.address.$setViewValue(anAddr); + scope.loadTxs = sinon.spy(); scope.submitForm(sendForm); var w = scope.wallet; - w.createTx.getCall(0).args[1].should.equal(100 * scope.wallet.settings.unitToSatoshi); + w.spend.getCall(0).args[0].amountSat.should.equal(100 * scope.wallet.settings.unitToSatoshi); scope.wallet.settings.unitToSatoshi = old; }); @@ -276,11 +290,11 @@ describe("Unit: Controllers", function() { var old = $rootScope.wallet.settings.unitToSatoshi; $rootScope.wallet.settings.unitToSatoshi = 100000000;; - sendForm.address.$setViewValue('mkfTyEk7tfgV611Z4ESwDDSZwhsZdbMpVy'); + sendForm.address.$setViewValue(anAddr); sendForm.amount.$setViewValue(5000); scope.submitForm(sendForm); - w.createTx.getCall(0).args[1].should.equal(5000 * $rootScope.wallet.settings.unitToSatoshi); + w.spend.getCall(0).args[0].amountSat.should.equal(5000 * $rootScope.wallet.settings.unitToSatoshi); $rootScope.wallet.settings.unitToSatoshi = old; })); @@ -300,39 +314,6 @@ describe("Unit: Controllers", function() { done(); }); }); - - it('should create and send a transaction proposal', function() { - sendForm.address.$setViewValue('mkfTyEk7tfgV611Z4ESwDDSZwhsZdbMpVy'); - sendForm.amount.$setViewValue(1000); - scope.loadTxs = sinon.spy(); - - var w = scope.wallet; - w.requiresMultipleSignatures = sinon.stub().returns(false); - w.totalCopayers = w.requiredCopayers = 1; - - - scope.submitForm(sendForm); - sinon.assert.callCount(w.createTx, 1); - sinon.assert.callCount(w.sendTx, 1); - sinon.assert.callCount(scope.loadTxs, 1); - }); - - it('should not send txp when there is an error at creation', function() { - sendForm.address.$setViewValue('mkfTyEk7tfgV611Z4ESwDDSZwhsZdbMpVy'); - sendForm.amount.$setViewValue(1000); - scope.wallet.totalCopayers = scope.wallet.requiredCopayers = 1; - scope.loadTxs = sinon.spy(); - var w = scope.wallet; - w.createTx.yields('error'); - w.isShared = sinon.stub().returns(false); - - - scope.submitForm(sendForm); - - sinon.assert.callCount(w.createTx, 1); - sinon.assert.callCount(w.sendTx, 0); - sinon.assert.callCount(scope.loadTxs, 1); - }); }); describe("Unit: Version Controller", function() {