Move tests
This commit is contained in:
parent
f376e96ab2
commit
016f1351bd
10 changed files with 517 additions and 0 deletions
16
test/api/apiTest.js
Normal file
16
test/api/apiTest.js
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
71
test/api/configTest.js
Normal file
71
test/api/configTest.js
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var assert = require('chai').assert;
|
||||||
|
|
||||||
|
var LamassuConfig = require('lamassu-config');
|
||||||
|
var con = 'psql://lamassu:lamassu@localhost/lamassu';
|
||||||
|
var config = new LamassuConfig(con);
|
||||||
|
|
||||||
|
var jsonquest = require('jsonquest');
|
||||||
|
var express = require('express');
|
||||||
|
var app = express();
|
||||||
|
var testPort = 4000;
|
||||||
|
|
||||||
|
var cfg;
|
||||||
|
|
||||||
|
describe('configurations test', function(){
|
||||||
|
|
||||||
|
beforeEach(function(done) {
|
||||||
|
|
||||||
|
app.listen(testPort);
|
||||||
|
config.load(function(err, results) {
|
||||||
|
assert.isNull(err);
|
||||||
|
assert.ok(results.ok);
|
||||||
|
|
||||||
|
cfg = results.config;
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should get configurations from remote server', function(done) {
|
||||||
|
this.timeout(1000000);
|
||||||
|
|
||||||
|
var api = require('../../lib/atm-api');
|
||||||
|
api.init(app, cfg);
|
||||||
|
|
||||||
|
// make the request
|
||||||
|
setTimeout(function() {
|
||||||
|
jsonquest({
|
||||||
|
host: 'localhost',
|
||||||
|
port: testPort,
|
||||||
|
path: '/config',
|
||||||
|
method: 'GET',
|
||||||
|
protocol: 'http'
|
||||||
|
}, function (err, res, body) {
|
||||||
|
assert.isNull(err);
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
|
||||||
|
assert.isNull(body.err);
|
||||||
|
assert.ok(body.results);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
});
|
||||||
125
test/api/sendTest.js
Normal file
125
test/api/sendTest.js
Normal file
|
|
@ -0,0 +1,125 @@
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var async = require('async');
|
||||||
|
var hock = require('hock');
|
||||||
|
var createServer = require('../helpers/create-https-server.js');
|
||||||
|
var assert = require('chai').assert;
|
||||||
|
|
||||||
|
var LamassuConfig = require('lamassu-config');
|
||||||
|
var con = 'psql://lamassu:lamassu@localhost/lamassu';
|
||||||
|
var config = new LamassuConfig(con);
|
||||||
|
|
||||||
|
var fnTable = {};
|
||||||
|
|
||||||
|
var app = {
|
||||||
|
get: function(route, fn) {
|
||||||
|
fnTable[route] = fn;
|
||||||
|
},
|
||||||
|
post: function(route, fn) {
|
||||||
|
fnTable[route] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var cfg;
|
||||||
|
var port;
|
||||||
|
|
||||||
|
var blockchainMock = hock.createHock();
|
||||||
|
|
||||||
|
// blockchain info
|
||||||
|
var guid = '3acf1633-db4d-44a9-9013-b13e85405404';
|
||||||
|
var pwd = 'baz';
|
||||||
|
var bitAddr = '1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64';
|
||||||
|
|
||||||
|
|
||||||
|
describe('send test', function() {
|
||||||
|
|
||||||
|
beforeEach(function(done) {
|
||||||
|
|
||||||
|
async.parallel({
|
||||||
|
blockchain: async.apply(createServer, blockchainMock.handler),
|
||||||
|
config: function(cb) {
|
||||||
|
config.load(cb);
|
||||||
|
}
|
||||||
|
}, function(err, results) {
|
||||||
|
assert.isNull(err);
|
||||||
|
|
||||||
|
cfg = results.config.config;
|
||||||
|
port = results.blockchain.address().port;
|
||||||
|
|
||||||
|
cfg.exchanges.plugins.current.transfer = 'blockchain';
|
||||||
|
cfg.exchanges.plugins.settings.blockchain = {
|
||||||
|
host: 'localhost',
|
||||||
|
port: results.blockchain.address().port,
|
||||||
|
rejectUnauthorized: false,
|
||||||
|
password: pwd,
|
||||||
|
fromAddress: bitAddr,
|
||||||
|
guid: guid
|
||||||
|
};
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should send to blockchain', function(done) {
|
||||||
|
this.timeout(1000000);
|
||||||
|
|
||||||
|
var amount= 100000000;
|
||||||
|
|
||||||
|
var address_reponse = {
|
||||||
|
'hash160':'660d4ef3a743e3e696ad990364e555c271ad504b',
|
||||||
|
'address': bitAddr,
|
||||||
|
'n_tx': 1,
|
||||||
|
'n_unredeemed': 1,
|
||||||
|
'total_received': 0,
|
||||||
|
'total_sent': 0,
|
||||||
|
'final_balance': 0,
|
||||||
|
'txs': []
|
||||||
|
};
|
||||||
|
|
||||||
|
var payment_response = {
|
||||||
|
'message': 'Sent 0.1 BTC to 1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64',
|
||||||
|
'tx_hash': 'f322d01ad784e5deeb25464a5781c3b20971c1863679ca506e702e3e33c18e9c',
|
||||||
|
'notice': 'Some funds are pending confirmation and cannot be spent yet (Value 0.001 BTC)'
|
||||||
|
};
|
||||||
|
|
||||||
|
blockchainMock
|
||||||
|
.get('/address/1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64?format=json&limit=10&password=baz')
|
||||||
|
.reply(200, address_reponse)
|
||||||
|
.post('/merchant/3acf1633-db4d-44a9-9013-b13e85405404/payment?to=1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64&amount=100000000&from=1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64&password=baz')
|
||||||
|
.reply(200, payment_response);
|
||||||
|
|
||||||
|
|
||||||
|
var api = require('../../lib/atm-api');
|
||||||
|
api.init(app, cfg);
|
||||||
|
|
||||||
|
var params = {
|
||||||
|
body: {
|
||||||
|
address: bitAddr,
|
||||||
|
satoshis: amount
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
fnTable['/send'](params, {json: function(result) {
|
||||||
|
assert.isNull(result.err);
|
||||||
|
assert.equal(payment_response.tx_hash, result.results);
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
});
|
||||||
119
test/api/tickerTest.js
Normal file
119
test/api/tickerTest.js
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var hock = require('hock');
|
||||||
|
var async = require('async');
|
||||||
|
var createServer = require('../helpers/create-https-server.js');
|
||||||
|
var assert = require('chai').assert;
|
||||||
|
|
||||||
|
var LamassuConfig = require('lamassu-config');
|
||||||
|
var con = 'psql://lamassu:lamassu@localhost/lamassu';
|
||||||
|
var config = new LamassuConfig(con);
|
||||||
|
|
||||||
|
var cfg;
|
||||||
|
|
||||||
|
var blockchainMock = hock.createHock();
|
||||||
|
var bitpayMock = hock.createHock();
|
||||||
|
|
||||||
|
var jsonquest = require('jsonquest');
|
||||||
|
var express = require('express');
|
||||||
|
var app = express();
|
||||||
|
var testPort = 4000;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
describe('ticker test', function(){
|
||||||
|
|
||||||
|
beforeEach(function(done) {
|
||||||
|
|
||||||
|
app.listen(testPort);
|
||||||
|
|
||||||
|
async.parallel({
|
||||||
|
blockchain: async.apply(createServer, blockchainMock.handler),
|
||||||
|
bitpay: async.apply(createServer, bitpayMock.handler),
|
||||||
|
config: config.load.bind(config)
|
||||||
|
}, function(err, results) {
|
||||||
|
assert.isNull(err);
|
||||||
|
|
||||||
|
cfg = results.config.config;
|
||||||
|
|
||||||
|
cfg.exchanges.settings.commission = 1;
|
||||||
|
|
||||||
|
cfg.exchanges.plugins.current.ticker = 'bitpay';
|
||||||
|
cfg.exchanges.plugins.current.trade = null;
|
||||||
|
cfg.exchanges.plugins.settings.bitpay = {
|
||||||
|
host: 'localhost',
|
||||||
|
port: results.bitpay.address().port,
|
||||||
|
rejectUnauthorized: false
|
||||||
|
};
|
||||||
|
|
||||||
|
cfg.exchanges.plugins.current.transfer = 'blockchain';
|
||||||
|
cfg.exchanges.plugins.settings.blockchain = {
|
||||||
|
host: 'localhost',
|
||||||
|
port: results.blockchain.address().port,
|
||||||
|
rejectUnauthorized: false,
|
||||||
|
password: 'baz',
|
||||||
|
fromAddress: '1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64',
|
||||||
|
guid: '3acf1633-db4d-44a9-9013-b13e85405404'
|
||||||
|
};
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should read ticker data from bitpay', function(done) {
|
||||||
|
this.timeout(1000000);
|
||||||
|
|
||||||
|
bitpayMock
|
||||||
|
.get('/api/rates')
|
||||||
|
.reply(200, [
|
||||||
|
{ code: 'EUR', rate: 1337 },
|
||||||
|
{ code: 'USD', rate: 100 }
|
||||||
|
]);
|
||||||
|
|
||||||
|
blockchainMock
|
||||||
|
.get('/merchant/3acf1633-db4d-44a9-9013-b13e85405404/address_balance?address=1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64&confirmations=0&password=baz')
|
||||||
|
.reply(200, { balance: 100000000, total_received: 100000000 })
|
||||||
|
.get('/merchant/3acf1633-db4d-44a9-9013-b13e85405404/address_balance?address=1LhkU2R8nJaU8Zj6jB8VjWrMpvVKGqCZ64&confirmations=1&password=baz')
|
||||||
|
.reply(200, { balance: 100000000, total_received: 100000000 });
|
||||||
|
// That's 1 BTC.
|
||||||
|
|
||||||
|
var api = require('../../lib/atm-api');
|
||||||
|
api.init(app, cfg);
|
||||||
|
|
||||||
|
// let ticker rate fetch finish...
|
||||||
|
setTimeout(function() {
|
||||||
|
jsonquest({
|
||||||
|
host: 'localhost',
|
||||||
|
port: testPort,
|
||||||
|
path: '/poll/USD',//:currency
|
||||||
|
method: 'GET',
|
||||||
|
protocol: 'http'
|
||||||
|
}, function (err, res, body) {
|
||||||
|
assert.isNull(err);
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
|
||||||
|
assert.isNull(body.err);
|
||||||
|
assert.equal(Number(body.rate) > 0, true);
|
||||||
|
console.log(100 / cfg.exchanges.settings.lowBalanceMargin, body.fiat);
|
||||||
|
assert.equal(body.fiat, 100 / cfg.exchanges.settings.lowBalanceMargin);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
});
|
||||||
70
test/api/tradeTest.js
Normal file
70
test/api/tradeTest.js
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||||
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var assert = require('chai').assert;
|
||||||
|
var hock = require('hock');
|
||||||
|
|
||||||
|
var LamassuConfig = require('lamassu-config');
|
||||||
|
var con = 'psql://lamassu:lamassu@localhost/lamassu';
|
||||||
|
var config = new LamassuConfig(con);
|
||||||
|
|
||||||
|
var fnTable = {};
|
||||||
|
var app = { get: function(route, fn) {
|
||||||
|
fnTable[route] = fn;
|
||||||
|
},
|
||||||
|
post: function(route, fn) {
|
||||||
|
fnTable[route] = fn;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var cfg;
|
||||||
|
|
||||||
|
var bitstampMock = hock.createHock();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the tests
|
||||||
|
*/
|
||||||
|
describe('trade test', function(){
|
||||||
|
|
||||||
|
beforeEach(function(done) {
|
||||||
|
config.load(function(err, result) {
|
||||||
|
assert.isNull(err);
|
||||||
|
cfg = result.config;
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
it('should execute a trade against bitstamp', function(done) {
|
||||||
|
this.timeout(1000000);
|
||||||
|
|
||||||
|
cfg.exchanges.plugins.trade = 'bitstamp';
|
||||||
|
var api = require('../../lib/atm-api');
|
||||||
|
api.init(app, cfg);
|
||||||
|
|
||||||
|
// schedule two trades this should result in a single consolidated trade hitting the trading system
|
||||||
|
fnTable['/trade']({body: {fiat: 100, satoshis: 10, currency: 'USD'}}, {json: function(result) {
|
||||||
|
console.log(result);
|
||||||
|
}});
|
||||||
|
|
||||||
|
fnTable['/trade']({body: {fiat: 100, satoshis: 10, currency: 'USD'}}, {json: function(result) {
|
||||||
|
console.log(result);
|
||||||
|
}});
|
||||||
|
|
||||||
|
setTimeout(function() { done(); }, 1000000);
|
||||||
|
// check results and execute done()
|
||||||
|
});
|
||||||
|
});
|
||||||
57
test/fiatBalanceTest.js
Normal file
57
test/fiatBalanceTest.js
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var assert = require('chai').assert;
|
||||||
|
|
||||||
|
var LamassuConfig = require('lamassu-config');
|
||||||
|
var con = 'psql://lamassu:lamassu@localhost/lamassu';
|
||||||
|
var config = new LamassuConfig(con);
|
||||||
|
|
||||||
|
var api = require('../lib/protocol/api/api.js');
|
||||||
|
var RATE = 100;
|
||||||
|
var SATOSHI_FACTOR = Math.pow(10, 8);
|
||||||
|
var cfg;
|
||||||
|
|
||||||
|
describe('fiatBalance test', function() {
|
||||||
|
before(function(done) {
|
||||||
|
config.load(function(err, result) {
|
||||||
|
assert.isNull(err);
|
||||||
|
cfg = result.exchanges;
|
||||||
|
api.init(cfg);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
after(function(done) {
|
||||||
|
config.end();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should calculate balance correctly with transfer exchange only', function() {
|
||||||
|
// We have 2 bitcoins, want to trade 1 bitcoin for 100 fiat
|
||||||
|
var balance = api.fiatBalance(RATE / cfg.settings.commission, {
|
||||||
|
transferBalance: 2 * SATOSHI_FACTOR,
|
||||||
|
tradeBalance: null
|
||||||
|
}, 1 * SATOSHI_FACTOR, 100);
|
||||||
|
assert.equal(balance, 100 / cfg.settings.lowBalanceMargin);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should calculate balance correctly with both exchanges (trade > transfer)', function() {
|
||||||
|
// We have 2 bitcoins for transfer, 2000 fiat for trade, want to trade 1
|
||||||
|
// bitcoin for 100 fiat
|
||||||
|
var balance = api.fiatBalance(RATE / cfg.settings.commission, {
|
||||||
|
transferBalance: 2 * SATOSHI_FACTOR,
|
||||||
|
tradeBalance: 2000
|
||||||
|
}, 1 * SATOSHI_FACTOR, 100);
|
||||||
|
assert.equal(balance, 100 / cfg.settings.lowBalanceMargin);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should calculate balance correctly with both exchanges (transfer > trade)', function() {
|
||||||
|
// We have 2 bitcoins for transfer, 150 fiat for trade, want to trade 1
|
||||||
|
// bitcoin for 100 fiat
|
||||||
|
var balance = api.fiatBalance(RATE / cfg.settings.commission, {
|
||||||
|
transferBalance: 2 * SATOSHI_FACTOR,
|
||||||
|
tradeBalance: 150
|
||||||
|
}, 1 * SATOSHI_FACTOR, 100);
|
||||||
|
assert.equal(balance, 50 / cfg.settings.lowBalanceMargin);
|
||||||
|
});
|
||||||
|
});
|
||||||
17
test/fixtures/certificate.pem
vendored
Normal file
17
test/fixtures/certificate.pem
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICozCCAgwCCQCSX2bhri8GETANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMC
|
||||||
|
SUUxEjAQBgNVBAgTCVdhdGVyZm9yZDESMBAGA1UEBxMJV2F0ZXJmb3JkMREwDwYD
|
||||||
|
VQQKEwhuZWFyRm9ybTEMMAoGA1UECxMDZGV2MRQwEgYDVQQDEwtQZXRlciBFbGdl
|
||||||
|
cjEnMCUGCSqGSIb3DQEJARYYcGV0ZXIuZWxnZXJAbmVhcmZvcm0uY29tMB4XDTE0
|
||||||
|
MDEyMDExMjc1NloXDTE0MDIxOTExMjc1NlowgZUxCzAJBgNVBAYTAklFMRIwEAYD
|
||||||
|
VQQIEwlXYXRlcmZvcmQxEjAQBgNVBAcTCVdhdGVyZm9yZDERMA8GA1UEChMIbmVh
|
||||||
|
ckZvcm0xDDAKBgNVBAsTA2RldjEUMBIGA1UEAxMLUGV0ZXIgRWxnZXIxJzAlBgkq
|
||||||
|
hkiG9w0BCQEWGHBldGVyLmVsZ2VyQG5lYXJmb3JtLmNvbTCBnzANBgkqhkiG9w0B
|
||||||
|
AQEFAAOBjQAwgYkCgYEAtZBpc6ZpF3rVSOq0D2zD2PMgR4hBzka0tD7coEDRWgjH
|
||||||
|
CFCtwtB97yuV3zq6V0zcApogXIIM6NQm6vcSAna9hqEiQCJV18GEAylC7Z/AW7HP
|
||||||
|
L63kYTMAXhdoztLFrkczUbtHwCB6wyUehszSzWaozpS9+ESpf/bPxMJjfhuqOvcC
|
||||||
|
AwEAATANBgkqhkiG9w0BAQUFAAOBgQCF3oZsXXC4QIm5Say8AVPYlhyb0liUSmr8
|
||||||
|
owvESnPFy2PYFHMwzLCE4wnVsXcRq4gK0rXiiuBQsNEw/v93RfLWV4DLAlf9DoB2
|
||||||
|
sO3LA/LSj4ptjZ4Dki5NKfTK9b6QJoQkc/u68hEEOe/WYZPIxdaeki4aVCcnrv1v
|
||||||
|
zJ9YTluP7w==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
13
test/fixtures/certrequest.csr
vendored
Normal file
13
test/fixtures/certrequest.csr
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE REQUEST-----
|
||||||
|
MIICBDCCAW0CAQAwgZUxCzAJBgNVBAYTAklFMRIwEAYDVQQIEwlXYXRlcmZvcmQx
|
||||||
|
EjAQBgNVBAcTCVdhdGVyZm9yZDERMA8GA1UEChMIbmVhckZvcm0xDDAKBgNVBAsT
|
||||||
|
A2RldjEUMBIGA1UEAxMLUGV0ZXIgRWxnZXIxJzAlBgkqhkiG9w0BCQEWGHBldGVy
|
||||||
|
LmVsZ2VyQG5lYXJmb3JtLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
|
||||||
|
tZBpc6ZpF3rVSOq0D2zD2PMgR4hBzka0tD7coEDRWgjHCFCtwtB97yuV3zq6V0zc
|
||||||
|
ApogXIIM6NQm6vcSAna9hqEiQCJV18GEAylC7Z/AW7HPL63kYTMAXhdoztLFrkcz
|
||||||
|
UbtHwCB6wyUehszSzWaozpS9+ESpf/bPxMJjfhuqOvcCAwEAAaAuMBMGCSqGSIb3
|
||||||
|
DQEJBzEGEwRhc2RmMBcGCSqGSIb3DQEJAjEKEwhuZWFyRm9ybTANBgkqhkiG9w0B
|
||||||
|
AQUFAAOBgQC0+vxHKcdpeiUYYXJjUVHUC9xSR19l+8F7FNtehXyGNoxmpMwmEVkM
|
||||||
|
J1TUokG/HgBoh9vy8TxleHldDdA+9jjWfaPHk8LaRIkNguJ9IMvv3yctjcCD39lJ
|
||||||
|
Yb1mQWOYaDOsgsEqiN/U2K6yUneYGGKIndA/PrEmd1aBMOTQ7R9Tvg==
|
||||||
|
-----END CERTIFICATE REQUEST-----
|
||||||
15
test/fixtures/privatekey.pem
vendored
Normal file
15
test/fixtures/privatekey.pem
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIICXAIBAAKBgQC1kGlzpmkXetVI6rQPbMPY8yBHiEHORrS0PtygQNFaCMcIUK3C
|
||||||
|
0H3vK5XfOrpXTNwCmiBcggzo1Cbq9xICdr2GoSJAIlXXwYQDKULtn8Bbsc8vreRh
|
||||||
|
MwBeF2jO0sWuRzNRu0fAIHrDJR6GzNLNZqjOlL34RKl/9s/EwmN+G6o69wIDAQAB
|
||||||
|
AoGAS35aen3tIJgwavs8F1XQMTsWZuffBNgddvzUW8XXxqnzqB9zwJdUZcgnrwQK
|
||||||
|
SxZoPKS9Y/mnSIA+FmDZGjEpKEeLrFePYz9UHpSW3j3vmLwWNTyAFl/DjqyrCIpE
|
||||||
|
+qB309t9NYEdd7LTeJyfIfideyEDAZUaQ2VsVDQDypYeoUECQQDrNstTpkv24MLA
|
||||||
|
4rFiXSSiC5IT86QuXbmXeHNTdChhqFS8C5LVKqt4Prpq4QvwQksiHJkipp5zvy2V
|
||||||
|
zfvfVTNnAkEAxZvnnYR5XyIPMVRQtlV0iskbvnQovJ4l3B7UfHeP9DZ9uhAR4MUo
|
||||||
|
ttJGjDjUMo78w381KEAqePpKn+RhF70R8QJADqwEUtt0sZmjjFSXrAMTXehK3GO+
|
||||||
|
QgYmpYQl7Xa5bh4J6xDtv85Bk+aVykTvcbUw6pfOFZM/Hwk11rpak7vE0QJAEFGD
|
||||||
|
mvppm3WQk55G3AfKi/t3kw68nnbg4YCaQ30MIjqtv0O8djdR2Wcb9FBtFY/BR9Ol
|
||||||
|
bCGAYGUq7HFLo041wQJBAL2x2OvwnYYtXXOBY27tox3B1hDye7jRI5Q/IvcRB7YE
|
||||||
|
00q8L0XVaV4lmyd7tfFDQq/bfDUgTuwvkSPnQcpJDDw=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
14
test/helpers/create-https-server.js
Normal file
14
test/helpers/create-https-server.js
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
var https = require('https');
|
||||||
|
var fixtures = path.join(__dirname, '..', 'fixtures');
|
||||||
|
|
||||||
|
module.exports = function(handler, callback) {
|
||||||
|
var server = https.createServer({
|
||||||
|
key: fs.readFileSync(path.join(fixtures, 'privatekey.pem')),
|
||||||
|
cert: fs.readFileSync(path.join(fixtures, 'certificate.pem'))
|
||||||
|
}, handler);
|
||||||
|
server.listen(0, function() {
|
||||||
|
callback(null, server);
|
||||||
|
});
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue