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