bitcore-node-zcash/test/scaffold/add.integration.js

143 lines
3.5 KiB
JavaScript

'use strict';
var should = require('chai').should();
var sinon = require('sinon');
var path = require('path');
var fs = require('fs');
var proxyquire = require('proxyquire');
var mkdirp = require('mkdirp');
var rimraf = require('rimraf');
var add = require('../../lib/scaffold/add');
describe('#add', function() {
var basePath = path.resolve(__dirname, '..');
var testDir = path.resolve(basePath, 'temporary-test-data');
var startConfig = {
name: 'My Node',
services: []
};
var startPackage = {};
before(function(done) {
mkdirp(testDir + '/s0/s1', function(err) {
if (err) {
throw err;
}
fs.writeFile(
testDir + '/s0/s1/bitcore-node.json',
JSON.stringify(startConfig),
function(err) {
if (err) {
throw err;
}
fs.writeFile(
testDir + '/s0/s1/package.json',
JSON.stringify(startPackage),
done
);
}
);
});
});
after(function(done) {
// cleanup testing directories
rimraf(testDir, function(err) {
if (err) {
throw err;
}
done();
});
});
describe('will modify scaffold files', function() {
it('will give an error if expected files do not exist', function(done) {
add({
path: path.resolve(testDir, 's0'),
services: ['a', 'b', 'c']
}, function(err) {
should.exist(err);
err.message.match(/^Invalid state/);
done();
});
});
it('will receive error from `npm install`', function(done) {
var spawn = sinon.stub().returns({
stdout: {
on: sinon.stub()
},
stderr: {
on: sinon.stub()
},
on: sinon.stub().callsArgWith(1, 1)
});
var addtest = proxyquire('../../lib/scaffold/add', {
'child_process': {
spawn: spawn
}
});
addtest({
path: path.resolve(testDir, 's0/s1/'),
services: ['a', 'b', 'c']
}, function(err) {
should.exist(err);
err.message.should.equal('There was an error installing service: a');
done();
});
});
it('will update bitcore-node.json services', function(done) {
var callCount = 0;
var oldPackage = {
dependencies: {
'bitcore-lib-zcash': '^v0.13.7',
'bitcore-node': '^v0.2.0'
}
};
var spawn = sinon.stub().returns({
stdout: {
on: sinon.stub()
},
stderr: {
on: sinon.stub()
},
on: sinon.stub().callsArgWith(1, 0)
});
var addtest = proxyquire('../../lib/scaffold/add', {
'child_process': {
spawn: spawn
},
'fs': {
readFileSync: function() {
if (callCount === 1){
oldPackage.dependencies.a = '^v0.1';
} else if (callCount === 2){
oldPackage.dependencies.b = '^v0.1';
} else if (callCount === 3){
oldPackage.dependencies.c = '^v0.1';
}
callCount++;
return JSON.stringify(oldPackage);
}
}
});
addtest({
path: path.resolve(testDir, 's0/s1/'),
services: ['a', 'b', 'c']
}, function(err) {
should.not.exist(err);
var configPath = path.resolve(testDir, 's0/s1/bitcore-node.json');
var config = JSON.parse(fs.readFileSync(configPath));
config.services.should.deep.equal(['a','b','c']);
done();
});
});
});
});