mirror of https://github.com/BTCPrivate/copay.git
add preconditions and tests
This commit is contained in:
parent
1457764930
commit
889edf4b92
|
@ -54,8 +54,7 @@ TxProposal.getSentTs = function() {
|
|||
TxProposal.prototype.merge = function(other) {
|
||||
var ret = {};
|
||||
ret.events = this.mergeMetadata(other);
|
||||
ret.hasChanged = this.mergeBuilder(other); // TODO: use this?
|
||||
|
||||
ret.hasChanged = this.mergeBuilder(other);
|
||||
return ret;
|
||||
};
|
||||
|
||||
|
@ -151,6 +150,7 @@ TxProposals.prototype.getNtxids = function() {
|
|||
};
|
||||
|
||||
TxProposals.prototype.toObj = function(onlyThisNtxid) {
|
||||
if (onlyThisNtxid) throw new Error();
|
||||
var ret = [];
|
||||
for (var id in this.txps) {
|
||||
|
||||
|
@ -172,14 +172,15 @@ TxProposals.prototype.merge = function(inTxp) {
|
|||
var myTxps = this.txps;
|
||||
|
||||
var ntxid = inTxp.getID();
|
||||
var ret;
|
||||
var ret = {};
|
||||
ret.events = [];
|
||||
ret.events.hasChanged = false;
|
||||
|
||||
if (myTxps[ntxid]) {
|
||||
var v0 = myTxps[ntxid];
|
||||
var v1 = inTxp;
|
||||
ret = v0.merge(v1);
|
||||
} else {
|
||||
ret.events = {};
|
||||
ret.hasChanged = true;
|
||||
ret.events.push({
|
||||
type: 'new',
|
||||
|
|
|
@ -5,6 +5,7 @@ var imports = require('soop').imports();
|
|||
var http = require('http');
|
||||
var EventEmitter = imports.EventEmitter || require('events').EventEmitter;
|
||||
var async = require('async');
|
||||
var preconditions = require('preconditions').instance();
|
||||
|
||||
var bitcore = require('bitcore');
|
||||
var bignum = bitcore.Bignum;
|
||||
|
@ -126,7 +127,7 @@ Wallet.prototype._handleTxProposal = function(senderId, data) {
|
|||
|
||||
if (mergeInfo.hasChanged || added) {
|
||||
this.log('### BROADCASTING txProposals. ');
|
||||
this.sendTxProposals(null, inTxp.getID());
|
||||
this.sendTxProposal(inTxp.getID());
|
||||
}
|
||||
|
||||
this.emit('txProposalsUpdated');
|
||||
|
@ -153,7 +154,7 @@ Wallet.prototype._handleData = function(senderId, data, isInbound) {
|
|||
break;
|
||||
case 'walletReady':
|
||||
this.sendPublicKeyRing(senderId);
|
||||
this.sendTxProposals(senderId); // send old
|
||||
this.sendAllTxProposals(senderId); // send old txps
|
||||
break;
|
||||
case 'publicKeyRing':
|
||||
this._handlePublicKeyRing(senderId, data, isInbound);
|
||||
|
@ -355,12 +356,20 @@ Wallet.prototype.toEncryptedObj = function() {
|
|||
return this.storage.export(walletObj);
|
||||
};
|
||||
|
||||
Wallet.prototype.sendTxProposal = function(recipients, ntxid) {
|
||||
this.log('### SENDING txProposals TO:', recipients || 'All', this.txProposals);
|
||||
var id = toSend[i];
|
||||
Wallet.prototype.sendAllTxProposals = function(recipients) {
|
||||
var ntxids = this.txProposals.getNtxids();
|
||||
for (var i in ntxids) {
|
||||
var ntxid = ntxids[i];
|
||||
this.sendTxProposal(ntxid, recipients);
|
||||
}
|
||||
};
|
||||
|
||||
Wallet.prototype.sendTxProposal = function(ntxid, recipients) {
|
||||
preconditions.checkArgument(ntxid);
|
||||
this.log('### SENDING txProposal '+ntxid+' TO:', recipients || 'All', this.txProposals);
|
||||
this.network.send(recipients, {
|
||||
type: 'txProposal',
|
||||
txProposals: this.txProposals.toObj(id),
|
||||
txProposal: this.txProposals.txps[ntxid].toObj(),
|
||||
walletId: this.id,
|
||||
});
|
||||
};
|
||||
|
@ -450,7 +459,7 @@ Wallet.prototype.reject = function(ntxid) {
|
|||
}
|
||||
|
||||
txp.rejectedBy[myId] = Date.now();
|
||||
this.sendTxProposals(null, ntxid);
|
||||
this.sendTxProposal(ntxid);
|
||||
this.store();
|
||||
this.emit('txProposalsUpdated');
|
||||
};
|
||||
|
@ -475,7 +484,7 @@ Wallet.prototype.sign = function(ntxid, cb) {
|
|||
var ret = false;
|
||||
if (b.signaturesAdded > before) {
|
||||
txp.signedBy[myId] = Date.now();
|
||||
self.sendTxProposals(null, ntxid);
|
||||
self.sendTxProposal(ntxid);
|
||||
self.store();
|
||||
self.emit('txProposalsUpdated');
|
||||
ret = true;
|
||||
|
@ -503,7 +512,7 @@ Wallet.prototype.sendTx = function(ntxid, cb) {
|
|||
self.log('BITCOIND txid:', txid);
|
||||
if (txid) {
|
||||
self.txProposals.setSent(ntxid, txid);
|
||||
self.sendTxProposals(null, ntxid);
|
||||
self.sendTxProposal(ntxid);
|
||||
self.store();
|
||||
}
|
||||
return cb(txid);
|
||||
|
@ -630,7 +639,7 @@ Wallet.prototype.createTx = function(toAddress, amountSatStr, comment, opts, cb)
|
|||
var ntxid = self.createTxSync(toAddress, amountSatStr, comment, safeUnspent, opts);
|
||||
if (ntxid) {
|
||||
self.sendIndexes();
|
||||
self.sendTxProposals(null, ntxid);
|
||||
self.sendTxProposal(ntxid);
|
||||
self.store();
|
||||
self.emit('txProposalsUpdated');
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"mocha": "^1.18.2",
|
||||
"mocha-lcov-reporter": "0.0.1"
|
||||
"mocha-lcov-reporter": "0.0.1",
|
||||
"preconditions": "^1.0.7"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -219,7 +219,7 @@ describe('TxProposals model', function() {
|
|||
(w.txps[ntxid].signedBy[priv.id] - ts > 0).should.equal(true);
|
||||
(w.txps[ntxid].seenBy[priv.id] - ts > 0).should.equal(true);
|
||||
|
||||
var info = w.merge(w.txps[0]);
|
||||
var info = w.merge(w.txps[ntxid]);
|
||||
info.events.length.should.equal(0);
|
||||
|
||||
Object.keys(w.txps).length.should.equal(1);
|
||||
|
@ -293,7 +293,7 @@ describe('TxProposals model', function() {
|
|||
(w2.txps[ntxid].signedBy[priv.id] - ts > 0).should.equal(true);
|
||||
(w2.txps[ntxid].seenBy[priv.id] - ts > 0).should.equal(true);
|
||||
|
||||
var info = w.merge(w2);
|
||||
var info = w.merge(w2.txps[ntxid]);
|
||||
info.events.length.should.equal(1);
|
||||
info.events[0].type.should.equal('signed');
|
||||
|
||||
|
@ -401,7 +401,7 @@ describe('TxProposals model', function() {
|
|||
(w2.txps[ntxid].signedBy[priv.id] - ts > 0).should.equal(true);
|
||||
(w2.txps[ntxid].seenBy[priv.id] - ts > 0).should.equal(true);
|
||||
|
||||
var info = w.merge(w2);
|
||||
var info = w.merge(w2.txps[ntxid]);
|
||||
info.events.length.should.equal(1);
|
||||
info.events[0].type.should.equal('signed');
|
||||
|
||||
|
@ -431,7 +431,7 @@ describe('TxProposals model', function() {
|
|||
(w3.txps[ntxid].signedBy[priv2.id] - ts > 0).should.equal(true);
|
||||
(w3.txps[ntxid].seenBy[priv2.id] - ts > 0).should.equal(true);
|
||||
|
||||
var info = w.merge(w3);
|
||||
var info = w.merge(w3.txps[ntxid]);
|
||||
info.events.length.should.equal(0);
|
||||
|
||||
Object.keys(w.txps).length.should.equal(1);
|
||||
|
@ -522,7 +522,7 @@ describe('TxProposals model', function() {
|
|||
(w3.txps[ntxid].signedBy[priv3.id] - ts > 0).should.equal(true);
|
||||
(w3.txps[ntxid].seenBy[priv3.id] - ts > 0).should.equal(true);
|
||||
|
||||
var info = w.merge(w2);
|
||||
var info = w.merge(w2.txps[ntxid]);
|
||||
info.events.length.should.equal(0);
|
||||
|
||||
Object.keys(w.txps).length.should.equal(1);
|
||||
|
@ -535,7 +535,7 @@ describe('TxProposals model', function() {
|
|||
(w.txps[ntxid].signedBy[priv2.id] - ts > 0).should.equal(true);
|
||||
|
||||
|
||||
var info = w.merge(w3);
|
||||
var info = w.merge(w3.txps[ntxid]);
|
||||
info.events.length.should.equal(0);
|
||||
|
||||
var tx = w.txps[ntxid].builder.build();
|
||||
|
@ -601,7 +601,7 @@ describe('TxProposals model', function() {
|
|||
should.exist(w2.txps[ntxid].builder);
|
||||
should.exist(w2.txps[ntxid].builder.valueInSat);
|
||||
|
||||
w2.merge(w);
|
||||
w2.merge(w.txps[ntxid]);
|
||||
Object.keys(w2.txps).length.should.equal(1);
|
||||
});
|
||||
|
||||
|
|
|
@ -37,6 +37,10 @@ describe('Wallet model', function() {
|
|||
}).should.
|
||||
throw();
|
||||
});
|
||||
it('should getNetworkName', function() {
|
||||
var w = createW();
|
||||
w.getNetworkName().should.equal('testnet');
|
||||
});
|
||||
|
||||
var createW = function(netKey, N) {
|
||||
|
||||
|
@ -358,8 +362,7 @@ describe('Wallet model', function() {
|
|||
it('handle network txProposals correctly', function() {
|
||||
var w = createW();
|
||||
var txps = {
|
||||
'txProposals': {
|
||||
"txps": [{
|
||||
'txProposal': {
|
||||
"seenBy": {
|
||||
"undefined": 1402337282806
|
||||
},
|
||||
|
@ -398,11 +401,9 @@ describe('Wallet model', function() {
|
|||
"spendUnconfirmed": false,
|
||||
"tx": "0100000001c1cf12ab89729d19d3cdec8ae531b5038d56c741006a105d532b3a7afa65c12a01000000fd40010047304402201aad0ea92f929be21d60afb741b76bfcf2aa9614079cb9da76b15b3a1210f07b02205bc5c1895105da3ee682e532d2d49dfd1214fa6123fb9c9d552336f135c77eff0147304402203f02f15bb4ad4bc7d0ca4612fd9e9ae05a1331f3d62f302cf08dba56695f5dcf0220700110562fe228ebba324b120de64a7bbaddf049d67a313f749e9b32ee88787d014cad5321027da98ce0407138461f4ad803a1fb67afa4246f06ad0e1256a087daeffd82a8642102e7f87f2b094ec322be2fb99d3ca81fd6ac0ab26ce081e51ab18c507f8b6d1d162102ed5d256036e10568c33e0a15021cc1806e04d7d24c8f020aaae23ec2deecb4302103b6f88231bb5a5f4629e4d097492321f86968c6aeb012196a1fe3b217fe4ae0ac2103f6b5e2c1db3124a5058a0e3e83d5d0c412b9a5b50e2ef97e2b7e1c0af57ab3e355aeffffffff0215cd5b07000000001976a91434f8e0c5be216025a52addf18a987543cad23f7a88acdbd53e340000000017a914a09f10bc42b61ecf9d3d09550765c228f1cb808a8700000000"
|
||||
}
|
||||
}],
|
||||
"networkName": "testnet"
|
||||
}
|
||||
};
|
||||
w._handleTxProposals('senderID', txps, true);
|
||||
w._handleTxProposal('senderID', txps, true);
|
||||
Object.keys(w.txProposals.txps).length.should.equal(1);
|
||||
w.getTxProposals().length.should.equal(1);
|
||||
});
|
||||
|
@ -514,7 +515,6 @@ describe('Wallet model', function() {
|
|||
});
|
||||
|
||||
|
||||
|
||||
// tx handling
|
||||
|
||||
var createUTXO = function(w) {
|
||||
|
@ -577,7 +577,6 @@ describe('Wallet model', function() {
|
|||
});
|
||||
});
|
||||
it('should create & sign & send a transaction', function(done) {
|
||||
|
||||
var w = createW2(null, 1);
|
||||
var utxo = createUTXO(w);
|
||||
w.blockchain.fixUnspent(utxo);
|
||||
|
@ -588,9 +587,17 @@ describe('Wallet model', function() {
|
|||
});
|
||||
});
|
||||
});
|
||||
it('#getNetworkName', function() {
|
||||
var w = createW();
|
||||
w.getNetworkName().should.equal('testnet');
|
||||
it('should send TxProposal', function(done) {
|
||||
var w = createW2();
|
||||
var utxo = createUTXO(w);
|
||||
w.blockchain.fixUnspent(utxo);
|
||||
w.createTx(toAddress, amountSatStr, null, function(ntxid) {
|
||||
w.sendTxProposal.should.throw('Illegal Argument.');
|
||||
(function() {
|
||||
w.sendTxProposal(ntxid)
|
||||
}).should.not.throw();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
var mockFakeActivity = function(w, f) {
|
||||
|
|
Loading…
Reference in New Issue