105 lines
2.9 KiB
JavaScript
105 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
var chai = require('chai');
|
|
var should = chai.should();
|
|
|
|
var EventEmitter = require('eventemitter2').EventEmitter2;
|
|
var Promise = require('bluebird');
|
|
Promise.longStackTraces();
|
|
var bitcore = require('bitcore');
|
|
var _ = bitcore.deps._;
|
|
|
|
|
|
var mockAddresses = require('../data/addresses');
|
|
|
|
describe('BitcoreHTTP v1 addresses routes', function() {
|
|
|
|
// mocks
|
|
var nodeMock, agent;
|
|
var utxos_for_addrs = function(addrs) {
|
|
return _.reduce(addrs, function(utxos, addr) {
|
|
return utxos.concat(mockAddresses[addr].utxos);
|
|
}, []);
|
|
};
|
|
|
|
var powerset = function(set) {
|
|
if (set.length === 0) {
|
|
return [
|
|
[]
|
|
];
|
|
}
|
|
var sets = [];
|
|
var head = set.shift();
|
|
var tail = set;
|
|
powerset(tail).forEach(function(s) {
|
|
var copy = s.slice();
|
|
copy.push(head);
|
|
|
|
sets.push(copy);
|
|
sets.push(s);
|
|
});
|
|
return sets;
|
|
};
|
|
|
|
beforeEach(function() {
|
|
nodeMock = new EventEmitter();
|
|
nodeMock.addressService = {};
|
|
nodeMock.addressService.getSummary = function(address) {
|
|
return Promise.resolve(mockAddresses[address.toString()].summary);
|
|
};
|
|
nodeMock.addressService.getUnspent = function(addresses) {
|
|
return Promise.resolve(utxos_for_addrs(addresses));
|
|
};
|
|
agent = require('../app')(nodeMock);
|
|
});
|
|
|
|
var failsWithInvalidAddress = function(agent, url, cb) {
|
|
agent.get(url)
|
|
.expect(422)
|
|
.expect('/v1/addresses/ parameter must be a valid bitcoin address', cb);
|
|
};
|
|
|
|
describe('/addresses/:address', function() {
|
|
it('fails with invalid address', function(cb) {
|
|
failsWithInvalidAddress(agent, '/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2', cb);
|
|
});
|
|
_.keys(mockAddresses).forEach(function(addr) {
|
|
var info = mockAddresses[addr];
|
|
it('works with valid address ' + addr, function(cb) {
|
|
agent.get('/v1/addresses/' + addr)
|
|
.expect(200)
|
|
.expect(info.summary, cb);
|
|
});
|
|
});
|
|
});
|
|
describe('/addresses/:address/utxos', function() {
|
|
it('fails with invalid address', function(cb) {
|
|
agent.get('/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2/utxos')
|
|
.expect(422)
|
|
.expect('/v1/addresses/ parameter must be a bitcoin address list', cb);
|
|
|
|
});
|
|
_.keys(mockAddresses).forEach(function(addr) {
|
|
it('works with valid address ' + addr, function(cb) {
|
|
agent.get('/v1/addresses/' + addr + '/utxos')
|
|
.expect(200)
|
|
.expect(utxos_for_addrs([addr]), cb);
|
|
});
|
|
});
|
|
});
|
|
describe('/addresses/:addresses/utxos', function() {
|
|
powerset(_.keys(mockAddresses)).forEach(function(addresses) {
|
|
if (addresses.length === 0) {
|
|
return;
|
|
}
|
|
var list = addresses.join(',');
|
|
it('works with valid addresses ' + list, function(cb) {
|
|
var path = '/v1/addresses/' + list + '/utxos';
|
|
agent.get(path)
|
|
.expect(200)
|
|
.expect(utxos_for_addrs(addresses), cb);
|
|
});
|
|
});
|
|
});
|
|
});
|