flosight-api/test/addressesCash.js
2018-01-15 16:35:41 -08:00

307 lines
8.2 KiB
JavaScript

'use strict';
var should = require('should');
var sinon = require('sinon');
var AddressController = require('../lib/addresses');
var _ = require('lodash');
var flocore = require('flocore-lib');
var bcoin = require('bcoin');
var rawHex = "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d010bffffffff0100f2052a010000004341047211a824f55b505228e4c3d5194c1fcfaa15a456abdf37f9b9d97a4040afc073dee6c89064984f03385237d92167c13e236446b417ab79a0fcae412ae3316b77ac00000000";
var bcoinTx = bcoin.tx.fromRaw(rawHex, 'hex');
bcoinTx.__blockhash = '0000000000000041ddc94ecf4f86a456a83b2e320c36c6f0c13ff92c7e75f013';
bcoinTx.blockhash = '0000000000000041ddc94ecf4f86a456a83b2e320c36c6f0c13ff92c7e75f013';
bcoinTx.__height = 534181;
bcoinTx.__timestamp = 1441116143;
bcoinTx.outputSatoshis = 53829829;
var txinfos2 = {
totalCount: 1,
items: [ bcoinTx ]
};
var utxos = [
{
'address': '1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA',
'txid': '63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73',
'vout': 1,
'timestamp': 1441116143,
'satoshis': 53320000,
'scriptPubKey': '76a914d2ec20bb8e5f25a52f730384b803d95683250e0b88ac',
'height': 534181,
'confirmations': 50
},
{
'address': '3EDL9HSincwLGfYbWPQ7LXtc4VqdwGoraS',
'txid': '63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73',
'vout': 2,
'timestamp': 1441116143,
'satoshis': 289829,
'scriptPubKey': '76a914583df9fa56ad961051e00ca93e68dfaf1eab9ec588ac',
'height': 534181,
'confirmations': 50
}
];
describe('Addresses / Florincoin Cash', function() {
var summary = {
addrStr: 'CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz',
balance: 0,
totalReceivedSat: 2782729129,
totalSentSat: 2782729129,
unconfirmedBalance: 0,
appearances: 2,
unconfirmedAppearances: 0,
txids: [
'bb0ec3b96209fac9529570ea6f83a86af2cceedde4aaf2bfcc4796680d23f1c7',
'01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3'
]
};
describe('/addr/:addr', function() {
var node = {
services: {
address: {
getAddressSummary: sinon.stub().callsArgWith(2, null, summary)
}
}
};
var addresses = new AddressController(node, true);
var req = {
addr: '',
query: {}
};
it('checkAddrs', function(done) {
var flosight = 0;
var req = {
query: {
noTxList: 1
},
params: {
addr: 'CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz'
},
};
var send = sinon.stub();
var status = sinon.stub().returns({send: send});
var res = {
status: status
};
addresses.checkAddrs(req, res, function(req2) {
req.addr.should.equal('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA');
req.addrs[0].should.equal('1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA');
done();
});
});
});
describe('/addr/:addr/utxo', function() {
it('should have correct data', function(done) {
var flosight = [
{
'address': 'CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz',
'txid': '63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73',
'vout': 1,
'ts': 1441116143,
'scriptPubKey': '76a914d2ec20bb8e5f25a52f730384b803d95683250e0b88ac',
'amount': 0.5332,
'confirmations': 50,
'height': 534181,
'satoshis': 53320000,
'confirmationsFromCache': true
}
];
var todos = [
{
confirmationsFromCache: true
}
];
var node = {
services: {
block: {
getTip: sinon.stub().returns({ height: 534230 })
},
address: {
getAddressUnspentOutputs: sinon.stub().callsArgWith(2, null, utxos.slice(0, 1))
}
},
};
var addresses = new AddressController(node, true);
var req = {
addr: 'CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz'
};
var res = {
jsonp: function(data) {
var merged = _.merge(data, todos);
should(merged).eql(flosight);
done();
}
};
addresses.utxo(req, res);
});
});
describe('/addrs/:addrs/utxo', function() {
it('should have the correct data', function(done) {
var flosight = [
{
'address': 'CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz',
'txid': '63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73',
'vout': 1,
'ts': 1441116143,
'scriptPubKey': '76a914d2ec20bb8e5f25a52f730384b803d95683250e0b88ac',
'amount': 0.5332,
'height': 534181,
'satoshis': 53320000,
'confirmations': 50
},
{
'address': 'HK3Sc5sodw9ztqRdN54GJvR969rejftcS9',
'txid': '63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73',
'vout': 2,
'ts': 1441116143,
'scriptPubKey': '76a914583df9fa56ad961051e00ca93e68dfaf1eab9ec588ac',
'amount': 0.00289829,
'height': 534181,
'satoshis': 289829,
'confirmations': 50
}
];
var utxoStub = sinon.stub();
utxoStub.onCall(0).callsArgWith(2, null, [utxos[0]]);
utxoStub.onCall(1).callsArgWith(2, null, [utxos[1]]);
var node = {
services: {
address: {
getAddressUnspentOutputs: utxoStub
},
block: {
getTip: sinon.stub().returns({ height: 534230 })
}
},
};
var addresses = new AddressController(node, true);
var req = {
addrs: 'mzkD4nmQ8ixqxySdBgsXTpgvAMK5iRZpNK,moZY18rGNmh4YCPeugtGW46AkkWMQttBUD'
};
var finalData = '';
var res = {
write: function(data) {
finalData += data;
},
end: function() {
var finalObject = JSON.parse(finalData);
finalObject.should.eql(flosight);
done();
}
};
addresses.multiutxo(req, res);
});
});
describe('/addrs/:addrs/txs', function() {
it('should have correct data', function(done) {
var flosight = {
'totalItems': 1,
'from': 0,
'to': 1,
'items': [
{
'txid': '9b0fc92260312ce44e74ef369f5c66bbb85848f2eddd5a7a1cde251e54ccfdd5',
'version': 1,
'isCoinBase': true,
'locktime': 0,
'vin': [
{
'coinbase': '04ffff001d010b',
'sequence': 4294967295,
'n': 0
}
],
'vout': [
{
'value': '50.00000000',
'n': 0,
'scriptPubKey': {
'asm': '047211a824f55b505228e4c3d5194c1fcfaa15a456abdf37f9b9d97a4040afc073dee6c89064984f03385237d92167c13e236446b417ab79a0fcae412ae3316b77 OP_CHECKSIG',
'hex': '41047211a824f55b505228e4c3d5194c1fcfaa15a456abdf37f9b9d97a4040afc073dee6c89064984f03385237d92167c13e236446b417ab79a0fcae412ae3316b77ac',
'type': 'pubkeyhash',
'addresses': [
'CYognBa8KGDnHMcyM7siKgxRkCkUqLb4YM'
]
},
spentHeight: null,
spentIndex: null,
spentTxId: null
}
],
'blockhash': '0000000000000041ddc94ecf4f86a456a83b2e320c36c6f0c13ff92c7e75f013',
'blockheight': 534181,
'confirmations': 52,
'time': 1441116143,
'blocktime': 1441116143,
'valueOut': 0.53829829,
'size': 134
}
]
};
var node = {
services: {
address: {
getAddressHistory: sinon.stub().callsArgWith(2, null, txinfos2),
},
block: {
getTip: sinon.stub().returns({ height: 534232 })
}
}
};
var addresses = new AddressController(node, true);
var req = {
addrs: 'CcJ4qUfyQ8x5NwhAeCQkrBSWVeXxXghcNz,HK3Sc5sodw9ztqRdN54GJvR969rejftcS9',
query: {},
body: {}
};
var res = {
jsonp: function(data) {
should(data).eql(flosight);
done();
}
};
addresses.multitxs(req, res);
});
});
});