bitcore-node-zcash/test/model/transaction.js

113 lines
3.4 KiB
JavaScript
Raw Normal View History

2014-01-08 12:04:45 -08:00
#!/usr/bin/env node
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var
mongoose= require('mongoose'),
assert = require('assert'),
config = require('../../config/config'),
2014-01-11 19:44:37 -08:00
Transaction = require('../../app/models/Transaction'),
TransactionItem = require('../../app/models/TransactionItem'),
2014-01-11 20:16:22 -08:00
fs = require('fs'),
util = require('util');
2014-01-08 12:04:45 -08:00
2014-01-11 19:44:37 -08:00
var txItemsValid = JSON.parse(fs.readFileSync('test/model/txitems.json'));
2014-01-08 12:04:45 -08:00
mongoose.connection.on('error', function(err) { console.log(err); });
2014-01-11 19:44:37 -08:00
describe('Transaction', function(){
2014-01-08 12:04:45 -08:00
before(function(done) {
mongoose.connect(config.db);
done();
});
after(function(done) {
mongoose.connection.close();
done();
});
it('should pool tx\'s object from mongoose', function(done) {
2014-01-11 19:44:37 -08:00
var txid = '21798ddc9664ac0ef618f52b151dda82dafaf2e26d2bbef6cdaf55a6957ca237';
Transaction.fromIdWithInfo(txid, function(err, tx) {
2014-01-08 12:04:45 -08:00
if (err) done(err);
2014-01-11 19:44:37 -08:00
assert.equal(tx.txid, txid);
2014-01-09 13:35:14 -08:00
assert(!tx.info.isCoinBase);
2014-01-08 12:04:45 -08:00
done();
});
});
it('should pool tx\'s info from bitcoind', function(done) {
2014-01-11 19:44:37 -08:00
var txid = '21798ddc9664ac0ef618f52b151dda82dafaf2e26d2bbef6cdaf55a6957ca237';
Transaction.fromIdWithInfo(txid, function(err, tx) {
2014-01-08 12:04:45 -08:00
if (err) done(err);
2014-01-11 19:44:37 -08:00
assert.equal(tx.info.txid, txid);
assert.equal(tx.info.blockhash, '000000000185678d3d7ecc9962c96418174431f93fe20bf216d5565272423f74');
assert.equal(tx.info.valueOut, 1.66174);
assert.equal(tx.info.feeds, 0.0005 );
assert.equal(tx.info.size, 226 );
2014-01-09 13:35:14 -08:00
assert(!tx.info.isCoinBase);
2014-01-08 12:04:45 -08:00
done();
});
});
2014-01-09 13:18:47 -08:00
2014-01-11 19:44:37 -08:00
var txid1 = '2a104bab1782e9b6445583296d4a0ecc8af304e4769ceb64b890e8219c562399';
it('test a coinbase TX ' + txid1, function(done) {
Transaction.fromIdWithInfo(txid1, function(err, tx) {
2014-01-09 13:18:47 -08:00
if (err) done(err);
assert(tx.info.isCoinBase);
2014-01-11 19:44:37 -08:00
assert.equal(tx.info.txid, txid1);
2014-01-09 13:35:14 -08:00
assert(!tx.info.feeds);
2014-01-09 13:18:47 -08:00
done();
});
});
2014-01-10 10:51:19 -08:00
2014-01-11 19:44:37 -08:00
var txid2 = '64496d005faee77ac5a18866f50af6b8dd1f60107d6795df34c402747af98608';
it('test a broken TX ' + txid2, function(done) {
Transaction.fromIdWithInfo(txid2, function(err, tx) {
2014-01-10 10:51:19 -08:00
if (err) done(err);
2014-01-11 19:44:37 -08:00
assert.equal(tx.info.txid, txid2);
2014-01-10 10:51:19 -08:00
assert.equal(tx.info.vin[0].addr, null);
done();
});
});
2014-01-11 19:44:37 -08:00
txItemsValid.forEach( function(v) {
it('test a exploding TX ' + v.txid, function(done) {
// Remove first
TransactionItem.remove({txid: v.txid}, function(err) {
Transaction.explodeTransactionItems(v.txid, function(err, tx) {
if (err) done(err);
TransactionItem.find({txid: v.txid}).sort({ index:1 }).exec(function(err, readItems) {
2014-01-11 20:16:22 -08:00
var unmatch={};
v.items.forEach(function(validItem){
unmatch[validItem.addr] =1;
});
2014-01-11 19:44:37 -08:00
v.items.forEach(function(validItem){
readItems.forEach(function(readItem){
if ( readItem.addr === validItem.addr &&
2014-01-11 20:16:22 -08:00
parseInt(readItem.index) == parseInt(validItem.index) &&
parseFloat(readItem.value) == parseFloat(validItem.value) )
delete unmatch[validItem.addr];
2014-01-11 19:44:37 -08:00
});
});
2014-01-11 20:16:22 -08:00
var valid = util.inspect(v.items, { depth: null });
assert(!Object.keys(unmatch).length, '\n\tmatched:' + Object.keys(unmatch) + "\n\n" +valid + '\nvs.\n' + readItems);
2014-01-11 19:44:37 -08:00
done();
});
});
});
});
});
2014-01-08 12:04:45 -08:00
});