From c68b9e143e43253d5ea362a9ba6d335e14223748 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Fri, 15 Apr 2016 14:56:54 -0400 Subject: [PATCH] test: update transaction tests --- lib/transactions.js | 2 +- test/transactions.js | 158 +++++++++++++++++++++---------------------- 2 files changed, 79 insertions(+), 81 deletions(-) diff --git a/lib/transactions.js b/lib/transactions.js index a7c0bd0..c63d2b5 100644 --- a/lib/transactions.js +++ b/lib/transactions.js @@ -140,7 +140,7 @@ TxController.prototype.transformOutput = function(output, index) { //reqSigs: null, // TODO }, spentTxId: output.__spentTxId || null, - spentIndex: output.__spentIndex || null, + spentIndex: _.isUndefined(output.__spentIndex) ? null : output.__spentIndex, spentHeight: output.__spentHeight || null //spentTs: undefined // TODO }; diff --git a/test/transactions.js b/test/transactions.js index c70478c..75a7926 100644 --- a/test/transactions.js +++ b/test/transactions.js @@ -60,7 +60,10 @@ describe('Transactions', function() { 'addresses': [ 'mnQ4ZaGessNgdxmWPxbTHcfx4b8R6eUr1X' ] - } + }, + 'spentTxId': null, + 'spentIndex': null, + 'spentHeight': null }, { 'value': '0.13677426', @@ -76,6 +79,7 @@ describe('Transactions', function() { }, 'spentTxId': '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec', 'spentIndex': 1, + 'spentHeight': 10, 'spentTs': 1440997099 } ], @@ -168,29 +172,16 @@ describe('Transactions', function() { bitcoreTx.populateInputs = sinon.stub().callsArg(2); bitcoreTx.toObject = sinon.stub().returns(bitcoreTxObj); + bitcoreTx.outputs[1].__spentTxId = spentTxId; + bitcoreTx.outputs[1].__spentIndex = spentIndex; + bitcoreTx.outputs[1].__spentHeight = 10; + var node = { - getTransactionWithBlockInfo: sinon.stub().callsArgWith(2, null, bitcoreTx), + getTransactionWithBlockInfo: sinon.stub().callsArgWith(1, null, bitcoreTx), services: { - db: { - tip: { - __height: 534203 - } + bitcoind: { + height: 534203 }, - address: { - getInputForOutput: function(txid, outputIndex, options, callback) { - var data = false; - if (txid === 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0' && - outputIndex === 1) { - data = { - inputTxId: spentTxId, - inputIndex: spentIndex - } - } - setImmediate(function() { - callback(null, data); - }); - } - } }, network: 'testnet' }; @@ -210,13 +201,17 @@ describe('Transactions', function() { }); describe('/txs', function() { + var sandbox = sinon.sandbox.create(); + afterEach(function() { + sandbox.restore(); + }); it('by block hash', function(done) { var blockHex = '07000020a491892cca9f143f7f00b8d65bbce0204bb32e17e914325fa5010000000000003e28f0519ecf01f7f01ea8da61084b2e4741a18ce1f3738117b84458353764b06fb9e35567f20c1a78eb626f0301000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2303d6250800feb0aae355fe263600000963676d696e6572343208ae5800000000000000ffffffff01c018824a000000001976a91468bedce8982d25c3b6b03f6238cbad00378b8ead88ac000000000100000002ad5a14ae9d0f3221b790c4fc590fddceea1456e5692d8c4bf1ff7175f2b0c987000000008b4830450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307ffffffff9621ac65bc22ea593ca9a61a8d63e461bf3d3f277989df5d3bd33ddfae0aa1d8000000008a4730440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb31014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307ffffffff02dc374401000000001976a9144b7b335f978f130269fe661423258ae9642df8a188ac72b3d000000000001976a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac000000000100000002060d3cb6dfb7ffe85e2908010fea63190c9707e96fc7448128eb895b5e222771030000006b483045022100f67cffc0ae23adb236ff3edb4a9736e277605db30cc7708dfab8cf1e1483bbce022052396aa5d664ec1cb65992c423fd9a17e94dc7af328d2d559e90746dd195ca5901210346134da14907581d8190d3980caaf46d95e4eb9c1ca8e70f1fc6007fefb1909dfeffffff7b2d8a8263cffbdb722e2a5c74166e6f2258634e277c0b08f51b578b667e2fba000000006a473044022077222a91cda23af69179377c62d84a176fb12caff6c5cbf6ae9e5957ff3b1afe0220768edead76819228dcba18cca3c9a5a5d4c32919720f21df21a297ba375bbe5c012103371ea5a4dfe356b3ea4042a537d7ab7ee0faabd43e21b6cc076fda2240629eeefeffffff02209a1d00000000001976a9148e451eec7ca0a1764b4ab119274efdd2727b3c8588ac40420f00000000001976a914d0fce8f064cd1059a6a11501dd66fe42368572b088accb250800'; var blockIndex = { 'hash': '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7', 'blockheight': 533974, - 'chainWork': '0000000000000000000000000000000000000000000000054626b1839ade284a', - 'prevHash': '00000000000001a55f3214e9172eb34b20e0bc5bd6b8007f3f149fca2c8991a4', + 'chainwork': '0000000000000000000000000000000000000000000000054626b1839ade284a', + 'previousblockhash': '00000000000001a55f3214e9172eb34b20e0bc5bd6b8007f3f149fca2c8991a4', 'height': 533974 }; @@ -226,21 +221,33 @@ describe('Transactions', function() { getBlock: sinon.stub().callsArgWith(1, null, block), services: { bitcoind: { - getBlockIndex: sinon.stub().returns(blockIndex) - }, - db: { - tip: { - __height: 534209 - } - }, - address: { - getInputForOutput: sinon.stub().callsArgWith(3, null, false), + getBlockHeader: sinon.stub().callsArgWith(1, null, blockIndex), + height: 534209 } }, network: 'testnet' }; - bitcore.Transaction.prototype.populateInputs = function(db, pool, callback) { + bitcore.Transaction.prototype.populateSpentInfo = _.noop(); + sandbox.stub(bitcore.Transaction.prototype, 'populateSpentInfo', function(db, options, callback) { + if (this.hash === 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0') { + this.outputs[1].__spentTxId = '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec'; + this.outputs[1].__spentIndex = 1; + this.outputs[1].__spentHeight = 200; + } else if (this.hash === '2e01c7a4a0e335112236b711c4aaddd02e8dc59ba2cda416e8f80ff06dddd7e1') { + this.outputs[0].__spentTxId = '9a213b879da9073a9a30606f9046f35f36f268cbf03f6242993a97c4c07c00b9'; + this.outputs[0].__spentIndex = 1; + this.outputs[0].__spentHeight = 200; + + this.outputs[1].__spentTxId = '418d3eb60275957b3456b96902e908abf962e71be4c4f09486564254664951bc'; + this.outputs[1].__spentIndex = 34; + this.outputs[1].__spentHeight = 200; + } + callback(); + }); + + bitcore.Transaction.prototype.populateInputs = _.noop(); + sandbox.stub(bitcore.Transaction.prototype, 'populateInputs', function(db, pool, callback) { if(this.hash === 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0') { this.inputs[0].output = new bitcore.Transaction.Output({ satoshis: 18535505, @@ -263,7 +270,7 @@ describe('Transactions', function() { } callback(); - }; + }); var transactions = new TxController(node); @@ -293,7 +300,10 @@ describe('Transactions', function() { 'addresses': [ 'mq4oDPjmNWnBxbzx7qouzhpCSTMePUtYDF' ] - } + }, + 'spentTxId': null, + 'spentIndex': null, + 'spentHeight': null } ], 'blockhash': '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7', @@ -351,7 +361,10 @@ describe('Transactions', function() { 'addresses': [ 'mnQ4ZaGessNgdxmWPxbTHcfx4b8R6eUr1X' ] - } + }, + 'spentTxId': null, + 'spentIndex': null, + 'spentHeight': null }, { 'value': '0.13677426', @@ -367,6 +380,7 @@ describe('Transactions', function() { }, 'spentTxId': '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec', 'spentIndex': 1, + 'spentHeight': 200, 'spentTs': 1440997099 } ], @@ -429,6 +443,7 @@ describe('Transactions', function() { }, 'spentTxId': '9a213b879da9073a9a30606f9046f35f36f268cbf03f6242993a97c4c07c00b9', 'spentIndex': 1, + 'spentHeight': 200, 'spentTs': 1440992946 }, { @@ -445,6 +460,7 @@ describe('Transactions', function() { }, 'spentTxId': '418d3eb60275957b3456b96902e908abf962e71be4c4f09486564254664951bc', 'spentIndex': 34, + 'spentHeight': 200, 'spentTs': 1440999118 } ], @@ -485,9 +501,7 @@ describe('Transactions', function() { scriptPubKey: { reqSigs: 1 }, - spentIndex: 1, - spentTs: 1440997099, - spentTxId: '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec' + spentTs: 1440997099 } ] }, @@ -499,17 +513,13 @@ describe('Transactions', function() { scriptPubKey: { reqSigs: 1 }, - spentIndex: 1, - spentTs: 1440992946, - spentTxId: '9a213b879da9073a9a30606f9046f35f36f268cbf03f6242993a97c4c07c00b9' + spentTs: 1440992946 }, { scriptPubKey: { reqSigs: 1 }, - spentIndex: 34, - spentTs: 1440999118, - spentTxId: '418d3eb60275957b3456b96902e908abf962e71be4c4f09486564254664951bc' + spentTs: 1440999118 } ] } @@ -524,7 +534,7 @@ describe('Transactions', function() { var res = { jsonp: function(data) { - var merged = _.merge(data, todos); + _.merge(data, todos); should(data).eql(insight); done(); } @@ -610,41 +620,23 @@ describe('Transactions', function() { txinfos[1].tx.__timestamp = 1441072817; txinfos[1].tx.__height = 534110; + txinfos[0].tx.outputs[0].__spentTxId = '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3'; + txinfos[0].tx.outputs[0].__spentIndex = 0; + txinfos[0].tx.outputs[0].__spentHeight = 199; + + txinfos[1].tx.outputs[0].__spentTxId = '661194e5533a395ce9076f292b7e0fb28fe94cd8832a81b4aa0517ff58c1ddd2'; + txinfos[1].tx.outputs[0].__spentIndex = 0; + txinfos[1].tx.outputs[0].__spentHeight = 134; + + txinfos[1].tx.outputs[1].__spentTxId = '71a9e60c0341c9c258367f1a6d4253276f16e207bf84f41ff7412d8958a81bed'; + txinfos[1].tx.outputs[1].__spentIndex = 0; + txinfos[1].tx.outputs[1].__spentHeight = 112; + var node = { getAddressHistory: sinon.stub().callsArgWith(2, null, historyResult), services: { - db: { - tip: { - __height: 534223 - } - }, - address: { - getInputForOutput: function(txid, outputIndex, options, callback) { - var data = false; - if (txid === 'bb0ec3b96209fac9529570ea6f83a86af2cceedde4aaf2bfcc4796680d23f1c7') { - if (outputIndex === 0) { - data = { - inputTxId: '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3', - inputIndex: 0 - }; - } - } else if (txid === '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3') { - if (outputIndex === 0) { - data = { - inputTxId: '661194e5533a395ce9076f292b7e0fb28fe94cd8832a81b4aa0517ff58c1ddd2', - inputIndex: 0 - }; - } else if (outputIndex === 1) { - data = { - inputTxId: '71a9e60c0341c9c258367f1a6d4253276f16e207bf84f41ff7412d8958a81bed', - inputIndex: 0 - }; - } - } - setImmediate(function() { - callback(null, data); - }); - } + bitcoind: { + height: 534223 } }, network: 'testnet' @@ -688,6 +680,7 @@ describe('Transactions', function() { }, 'spentTxId': '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3', 'spentIndex': 0, + 'spentHeight': 199, 'spentTs': 1441072817 }, { @@ -701,7 +694,10 @@ describe('Transactions', function() { 'addresses': [ 'muHmEsjhjmATf9i3T9gHyeQoce9LXe2dWz' ] - } + }, + 'spentTxId': null, + 'spentIndex': null, + 'spentHeight': null } ], 'blockhash': '00000000000001001aba15de213648f370607fb048288dd27b96f7e833a73520', @@ -749,6 +745,7 @@ describe('Transactions', function() { }, 'spentTxId': '661194e5533a395ce9076f292b7e0fb28fe94cd8832a81b4aa0517ff58c1ddd2', 'spentIndex': 0, + 'spentHeight': 134, 'spentTs': 1441077236 }, { @@ -765,6 +762,7 @@ describe('Transactions', function() { }, 'spentTxId': '71a9e60c0341c9c258367f1a6d4253276f16e207bf84f41ff7412d8958a81bed', 'spentIndex': 0, + 'spentHeight': 112, 'spentTs': 1441069523 } ], @@ -845,7 +843,7 @@ describe('Transactions', function() { var hex = '01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2303d6250800feb0aae355fe263600000963676d696e6572343208ae5800000000000000ffffffff01c018824a000000001976a91468bedce8982d25c3b6b03f6238cbad00378b8ead88ac00000000'; var node = { - getTransaction: sinon.stub().callsArgWith(2, null, bitcore.Transaction().fromBuffer(new Buffer(hex, 'hex'))) + getTransaction: sinon.stub().callsArgWith(1, null, bitcore.Transaction().fromBuffer(new Buffer(hex, 'hex'))) }; var transactions = new TxController(node);