Files
bower/test/commands/init.js
2016-04-05 13:34:06 +02:00

162 lines
4.7 KiB
JavaScript

var expect = require('expect.js');
var helpers = require('../helpers');
var init = helpers.command('init');
describe('bower init', function () {
var mainPackage = new helpers.TempDir();
it('correctly reads arguments', function () {
expect(init.readOptions([]))
.to.eql([]);
});
it('generates bower.json file', function () {
mainPackage.prepare();
var logger = init({
cwd: mainPackage.path,
interactive: true
});
return helpers.expectEvent(logger, 'prompt')
.spread(function (prompt, answer) {
answer({
name: 'test-name',
description: 'test-description',
keywords: 'test-keyword',
authors: 'test-author',
license: 'test-license',
homepage: 'test-homepage',
private: true
});
return helpers.expectEvent(logger, 'prompt');
})
.spread(function (prompt, answer) {
answer({ prompt: true });
return helpers.expectEvent(logger, 'end');
})
.then(function () {
expect(mainPackage.readJson('bower.json')).to.eql({
name: 'test-name',
homepage: 'test-homepage',
authors: [ 'test-author' ],
description: 'test-description',
keywords: [ 'test-keyword' ],
license: 'test-license',
private: true
});
});
});
it('errors on non-interactive mode', function () {
mainPackage.prepare();
return helpers.run(init, { cwd: mainPackage.path }).then(
function () { throw 'should fail'; },
function (reason) {
expect(reason.message).to.be('Register requires an interactive shell');
expect(reason.code).to.be('ENOINT');
}
);
});
it('warns about existing bower.json', function () {
mainPackage.prepare({
'bower.json': {
name: 'foobar'
}
});
var logger = init({ cwd: mainPackage.path, interactive: true });
return helpers.expectEvent(logger, 'log').spread(function (event) {
expect(event.level).to.be('warn');
expect(event.message).to.be(
'The existing bower.json file will be used and filled in'
);
});
});
it('gets defaults from package.json', function () {
mainPackage.prepare({
'package.json': {
'name': 'name-from-npm',
'description': 'description from npm',
'main': 'index.js',
'keywords': [
'foo',
'bar'
],
'author': 'JD Isaacks',
'license': 'ISC'
}
});
var logger = init({
cwd: mainPackage.path,
interactive: true
});
return helpers.expectEvent(logger, 'prompt')
.spread(function (prompt, answer) {
// Get defaults from prompt
var defaults = prompt.reduce(function (memo, obj) {
memo[obj.name] = obj['default'];
return memo;
}, {});
// Answer with defaults
answer({
name: defaults.name,
description: defaults.description,
main: defaults.main,
keywords: defaults.keywords,
authors: defaults.authors,
license: defaults.license,
homepage: 'test-homepage',
private: true
});
return helpers.expectEvent(logger, 'prompt');
})
.spread(function (prompt, answer) {
answer({ prompt: true });
return helpers.expectEvent(logger, 'end');
})
.then(function () {
expect(mainPackage.readJson('bower.json')).to.eql({
'name': 'name-from-npm',
'description': 'description from npm',
'main': 'index.js',
'keywords': [
'foo',
'bar'
],
'authors': ['JD Isaacks'],
'license': 'ISC',
'private': true,
'homepage': 'test-homepage'
});
});
});
it('can handle strange characters', function () {
mainPackage.prepare({
'package.json': {
'name': 'name/from npm'
}
});
var logger = init({
cwd: mainPackage.path,
interactive: true
});
return helpers.expectEvent(logger, 'prompt');
});
});