From 00e4eac14a989d4c33bec2ee38694bcdfcefd6d2 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Wed, 19 Aug 2015 16:14:44 -0400 Subject: [PATCH] Layout test cases and files for cli commands. --- cli/bitcore-node.js | 18 +++++- lib/scaffold/add.js | 2 + lib/scaffold/create.js | 71 ++++++++++++++++++++++++ lib/scaffold/find-config.js | 2 + lib/scaffold/start.js | 1 + test/scaffold/add.integration.js | 40 +++++++++++++ test/scaffold/create.integration.js | 62 +++++++++++++++++++++ test/scaffold/find-config.integration.js | 36 ++++++++++++ test/scaffold/start.integration.js | 28 ++++++++++ 9 files changed, 257 insertions(+), 3 deletions(-) create mode 100644 lib/scaffold/add.js create mode 100644 lib/scaffold/create.js create mode 100644 lib/scaffold/find-config.js create mode 100644 lib/scaffold/start.js create mode 100644 test/scaffold/add.integration.js create mode 100644 test/scaffold/create.integration.js create mode 100644 test/scaffold/find-config.integration.js create mode 100644 test/scaffold/start.integration.js diff --git a/cli/bitcore-node.js b/cli/bitcore-node.js index fd285967..808be28c 100755 --- a/cli/bitcore-node.js +++ b/cli/bitcore-node.js @@ -2,6 +2,11 @@ var program = require('commander'); var version = require(__dirname + '/../package.json').version; +var create = require('../lib/scaffold/create'); +var add = require('../lib/scaffold/add'); +var start = require('../lib/scaffold/start'); +var stop = require('../lib/scaffold/stop'); +var findConfig = require('../lib/scaffold/find-config'); program .version(version) @@ -12,7 +17,9 @@ program .command('create [name]') .description('Create a new node') .action(function(directory, name){ - console.log(directory, name); + var config = findConfig(); + create(config, directory, name); + console.log('Successfully created node in directory: ', directory); }); program @@ -20,6 +27,9 @@ program .alias('install') .description('Install a module for the current node') .action(function(module){ + var config = findConfig(); + add(config, module); + console.log('Successfully added module: ', module); console.log(module); }).on('--help', function() { console.log(' Examples:'); @@ -34,14 +44,16 @@ program .option('-b', '--background', 'Will start in the background') .description('Start the current node') .action(function(){ - console.log('start'); + var config = findConfig(); + start(config); }); program .command('stop') .description('Stop the current node') .action(function(){ - console.log('stop'); + var config = findConfig(); + stop(config); }); program diff --git a/lib/scaffold/add.js b/lib/scaffold/add.js new file mode 100644 index 00000000..eb109abb --- /dev/null +++ b/lib/scaffold/add.js @@ -0,0 +1,2 @@ +'use strict'; + diff --git a/lib/scaffold/create.js b/lib/scaffold/create.js new file mode 100644 index 00000000..1e0b7dcc --- /dev/null +++ b/lib/scaffold/create.js @@ -0,0 +1,71 @@ +'use strict'; + +var bitcore = require('bitcore'); +var version = require('../../package.json').version; +var mkdirp = require('mkdirp'); +var fs = require('fs'); + +var BASE_CONFIG = { + name: 'My Node', + modules: [ + 'address' + ], + datadir: './data', + network: 'livenet' +}; + +var BASE_PACKAGE = { + dependencies: { + 'bitcore': '^' + bitcore.version, + 'bitcore-node': '^' + version + } +}; + +var BASE_BITCOIN_CONFIG = 'whitelist=127.0.0.1\n' + 'txindex=1\n'; + +function create(baseDirectory, dirname, name, done) { + + if (!baseDirectory) { + baseDirectory = process.cwd; + } + + var directory = baseDirectory + '/' + dirname; + + mkdirp(directory, function(err) { + if (err) { + throw err; + } + + // setup the configuration files + var config = BASE_CONFIG; + config.name = name; + var configJSON = JSON.stringify(config, null, 2); + var packageJSON = JSON.stringify(BASE_PACKAGE, null, 2); + try { + fs.writeFileSync(directory + '/bitcore-node.json', configJSON); + fs.writeFileSync(directory + '/package.json', packageJSON); + } catch(e) { + done(e); + } + + // setup the bitcoin data directory + mkdirp(directory + '/data', function(err) { + if (err) { + throw err; + } + + try { + fs.writeFileSync(directory + '/data/bitcoin.conf', BASE_BITCOIN_CONFIG); + } catch(e) { + done(e); + } + + done(); + + }); + + }); + +} + +module.exports = create; diff --git a/lib/scaffold/find-config.js b/lib/scaffold/find-config.js new file mode 100644 index 00000000..eb109abb --- /dev/null +++ b/lib/scaffold/find-config.js @@ -0,0 +1,2 @@ +'use strict'; + diff --git a/lib/scaffold/start.js b/lib/scaffold/start.js new file mode 100644 index 00000000..ad9a93a7 --- /dev/null +++ b/lib/scaffold/start.js @@ -0,0 +1 @@ +'use strict'; diff --git a/test/scaffold/add.integration.js b/test/scaffold/add.integration.js new file mode 100644 index 00000000..73a0d2c0 --- /dev/null +++ b/test/scaffold/add.integration.js @@ -0,0 +1,40 @@ +'use strict'; + +var should = require('chai').should(); +var sinon = require('sinon'); + +describe('#add', function() { + + before(function() { + // setup testing directories + }); + + after(function() { + // cleanup testing directories + }); + + describe('will modify scaffold files', function() { + + it('will give an error if expected files do not exist', function() { + + }); + + it('will update bitcore-node.json modules', function() { + + }); + + it('will update package.json modules', function() { + + }); + + it('will install the necessary node.js modules', function() { + + }); + + it('will install dependencies', function() { + + }); + + }); + +}); diff --git a/test/scaffold/create.integration.js b/test/scaffold/create.integration.js new file mode 100644 index 00000000..202fd9a7 --- /dev/null +++ b/test/scaffold/create.integration.js @@ -0,0 +1,62 @@ +'use strict'; + +var should = require('chai').should(); +var create = require('../../lib/scaffold/create'); +var fs = require('fs'); +var mkdirp = require('mkdirp'); +var rimraf = require('rimraf'); + +describe('#create', function() { + + var basePath = __dirname + '/../'; + var testDir = basePath + 'temporary-test-data'; + + before(function(done) { + // setup testing directories + mkdirp(testDir, function(err) { + if (err) { + throw err; + } + done(); + }); + }); + + after(function(done) { + // cleanup testing directories + rimraf(testDir, function(err) { + if (err) { + throw err; + } + done(); + }); + }); + + it('will create scaffold files', function() { + + create(testDir, 'mynode', 'My Node 1', function(err) { + if (err) { + throw err; + } + + var configPath = testDir + '/mynode/bitcore-node.json'; + var packagePath = testDir + '/mynode/package.json'; + var bitcoinConfig = testDir + '/mynode/data/bitcoin.conf'; + + should.equal(fs.existsSync(configPath), true); + should.equal(fs.existsSync(packagePath), true); + should.equal(fs.existsSync(bitcoinConfig), true); + + var config = JSON.parse(fs.readFileSync(configPath)); + config.name.should.equal('My Node 1'); + config.modules.should.deep.equal(['address']); + config.datadir.should.equal('./data'); + config.network.should.equal('livenet'); + + var pack = JSON.parse(fs.readFileSync(packagePath)); + should.exist(pack.dependencies); + + }); + + }); + +}); diff --git a/test/scaffold/find-config.integration.js b/test/scaffold/find-config.integration.js new file mode 100644 index 00000000..17cb4621 --- /dev/null +++ b/test/scaffold/find-config.integration.js @@ -0,0 +1,36 @@ +'use strict'; + +var should = require('chai').should(); +var sinon = require('sinon'); + +describe('#findConfig', function() { + + before(function() { + // setup testing directories + }); + + after(function() { + // cleanup testing directories + }); + + describe('will find a configuration file', function() { + + it('in the current directory', function() { + + }); + + it('in a parent directory', function() { + + }); + + it('recursively find in parent directories', function() { + + }); + + }); + + it('will fallback to a default location in the home directory', function() { + + }); + +}); diff --git a/test/scaffold/start.integration.js b/test/scaffold/start.integration.js new file mode 100644 index 00000000..8b7ec2bf --- /dev/null +++ b/test/scaffold/start.integration.js @@ -0,0 +1,28 @@ +'use strict'; + +var should = require('chai').should(); +var sinon = require('sinon'); + +describe('#start', function() { + + before(function() { + // setup testing directories + }); + + after(function() { + // cleanup testing directories + }); + + describe('will dynamically create a node from a configuration', function() { + + it('require each bitcore-node module', function() { + + }); + + it('create an instance of node with modules enabled', function() { + + }); + + }); + +});