Added project detail prompts.
These prompts include things like project name, description, authors, and homepage, all set with sane defaults. Change-Id: Ia0f16b517c64953af77dd82829361ab5305f95d8
This commit is contained in:
@@ -1,19 +1,60 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var Q = require('q');
|
||||
var pkgBuilder = require('../pkg_builder');
|
||||
var projectBuilder = require('../project_builder');
|
||||
|
||||
var packagePath = 'package.json';
|
||||
|
||||
/**
|
||||
* No-op placeholder method, for handlers we don't need.
|
||||
* Iterate over needed package components, ensuring that required
|
||||
* parameters are set.
|
||||
*
|
||||
* @param {generator} generator The currently active generator.
|
||||
* @returns {generator} The passed generator, for promise chaining.
|
||||
*/
|
||||
function noop (generator) {
|
||||
return generator;
|
||||
function promptPackage (generator) {
|
||||
var deferred = Q.defer();
|
||||
|
||||
if (!generator.options['non-interactive']) {
|
||||
generator.prompt(
|
||||
[{
|
||||
type: 'input',
|
||||
name: 'name',
|
||||
message: 'Project- Name:',
|
||||
default: pkgBuilder.getValue('name')
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'description',
|
||||
message: 'Project- Description:',
|
||||
default: pkgBuilder.getValue('description')
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'version',
|
||||
message: 'Project- Version:',
|
||||
default: pkgBuilder.getValue('version', '0.0.1')
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'homepage',
|
||||
message: 'Project- Homepage:',
|
||||
default: pkgBuilder.getValue('homepage', 'http://www.openstack.org/')
|
||||
}, {
|
||||
type: 'input',
|
||||
name: 'author',
|
||||
message: 'Project- Author:',
|
||||
default: pkgBuilder.getValue('author',
|
||||
'OpenStack <openstack-dev@lists.openstack.org> (http://www.openstack.org/)')
|
||||
}],
|
||||
function (answers) {
|
||||
pkgBuilder.setValues(answers);
|
||||
deferred.resolve(generator);
|
||||
});
|
||||
} else {
|
||||
deferred.resolve(generator);
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -46,7 +87,7 @@
|
||||
|
||||
module.exports = {
|
||||
init: initializePackage,
|
||||
prompt: noop,
|
||||
prompt: promptPackage,
|
||||
configure: configurePkg
|
||||
};
|
||||
})();
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
it('should create all files created in the project builder',
|
||||
function (done) {
|
||||
helpers.run(generator)
|
||||
.withArguments(['--non-interactive'])
|
||||
.on('end', function () {
|
||||
assert.file(['.gitreview']); // We'll just use a file we know about.
|
||||
done();
|
||||
@@ -59,6 +60,7 @@
|
||||
projectBuilder.writeFile('test_undefined.json');
|
||||
|
||||
helpers.run(generator)
|
||||
.withArguments(['--non-interactive'])
|
||||
.on('end', function () {
|
||||
assert.file(['test.json', 'test_static.json', 'test_empty.json', 'test_null.json',
|
||||
'test_undefined.json']);
|
||||
@@ -71,6 +73,7 @@
|
||||
projectBuilder.removeFile('test.json');
|
||||
|
||||
helpers.run(generator)
|
||||
.withArguments(['--non-interactive'])
|
||||
.on('end', function () {
|
||||
assert.noFile(['test.json']);
|
||||
done();
|
||||
|
||||
@@ -8,11 +8,18 @@
|
||||
var mocks = require('../../../helpers/mocks');
|
||||
var mockGenerator;
|
||||
|
||||
var packageFile = {};
|
||||
|
||||
describe('generator-openstack:lib/component/pkg', function () {
|
||||
|
||||
beforeEach(function () {
|
||||
mockGenerator = mocks.buildGenerator();
|
||||
projectBuilder.clear();
|
||||
jasmine.clock().install();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
jasmine.clock().uninstall();
|
||||
});
|
||||
|
||||
it('should define init, prompt, and configure',
|
||||
@@ -40,17 +47,95 @@
|
||||
});
|
||||
|
||||
describe('prompt()', function () {
|
||||
it('should return a generator',
|
||||
|
||||
it('should return a promise that resolves with a generator',
|
||||
function () {
|
||||
var outputGenerator = pkg.prompt(mockGenerator);
|
||||
expect(outputGenerator).toEqual(mockGenerator);
|
||||
var generator = mocks.buildGenerator();
|
||||
var outputPromise = pkg.prompt(generator);
|
||||
outputPromise.then(function (outputGenerator) {
|
||||
expect(outputGenerator).toEqual(generator);
|
||||
});
|
||||
});
|
||||
|
||||
it('should do nothing',
|
||||
it('should revert to config defaults if no answers provided',
|
||||
function () {
|
||||
var spy = spyOn(mockGenerator, 'prompt');
|
||||
pkg.prompt(mockGenerator);
|
||||
expect(spy.calls.any()).toBeFalsy();
|
||||
var config = {};
|
||||
var mockAnswers = {};
|
||||
var generator = mocks.buildGenerator(config, mockAnswers);
|
||||
|
||||
// Start with a blank package file.
|
||||
generator.fs.write('package.json', JSON.stringify({}));
|
||||
|
||||
// Set defaults
|
||||
pkg.init(generator);
|
||||
pkg.configure(generator);
|
||||
pkg.prompt(generator);
|
||||
|
||||
// Call the generator
|
||||
expect(pkgBuilder.getValues()).toEqual({
|
||||
name: null,
|
||||
description: null,
|
||||
version: '0.0.1',
|
||||
homepage: 'http://www.openstack.org/',
|
||||
author: 'OpenStack <openstack-dev@lists.openstack.org> (http://www.openstack.org/)'
|
||||
});
|
||||
});
|
||||
|
||||
it('should not show a prompt if non-interactive is set',
|
||||
function () {
|
||||
var generator = mocks.buildGenerator(null, null,
|
||||
{'non-interactive': true});
|
||||
var promptSpy = spyOn(generator, 'prompt');
|
||||
|
||||
generator.fs.write('package.json', JSON.stringify(packageFile));
|
||||
|
||||
pkg.init(generator);
|
||||
pkg.prompt(generator);
|
||||
|
||||
expect(promptSpy.calls.any()).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should use defaults in package.json if no answers provided',
|
||||
function () {
|
||||
var generator = mocks.buildGenerator();
|
||||
|
||||
var mockPackage = {
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
version: '0.0.1',
|
||||
homepage: 'http://www.openstack.org/',
|
||||
author: 'OpenStack <openstack-dev@lists.openstack.org> (http://www.openstack.org/)'
|
||||
};
|
||||
generator.fs.write('package.json', JSON.stringify(mockPackage));
|
||||
|
||||
pkg.init(generator);
|
||||
pkg.configure(generator);
|
||||
pkg.prompt(generator);
|
||||
|
||||
expect(pkgBuilder.getValues()).toEqual(mockPackage);
|
||||
});
|
||||
|
||||
it('should configure answers if answers provided',
|
||||
function () {
|
||||
var config = {};
|
||||
var mockAnswers = {
|
||||
name: 'name',
|
||||
description: 'description',
|
||||
version: '1.0.0',
|
||||
homepage: 'http://example.openstack.org/',
|
||||
author: 'Example Author'
|
||||
};
|
||||
var generator = mocks.buildGenerator(config, mockAnswers);
|
||||
|
||||
// Start with a blank package file.
|
||||
generator.fs.write('package.json', JSON.stringify({}));
|
||||
|
||||
// Set defaults
|
||||
pkg.init(generator);
|
||||
pkg.prompt(generator);
|
||||
pkg.configure(generator);
|
||||
|
||||
expect(pkgBuilder.getValues()).toEqual(mockAnswers);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user