ember-cli
Version:
Command line tool for developing ambitious ember.js apps
284 lines (220 loc) • 8.23 kB
JavaScript
;
var path = require('path');
var Project = require('../../../lib/models/project');
var Addon = require('../../../lib/models/addon');
var tmp = require('../../helpers/tmp');
var touch = require('../../helpers/file-utils').touch;
var assert = require('assert');
var emberCLIVersion = require('../../../lib/utilities/ember-cli-version');
describe('models/project.js', function() {
var project, projectPath;
describe('Project.prototype.config', function() {
var called = false;
beforeEach(function() {
projectPath = process.cwd() + '/tmp/test-app';
called = false;
return tmp.setup(projectPath)
.then(function() {
touch(projectPath + '/config/environment.js', {
baseURL: '/foo/bar'
});
project = new Project(projectPath, { });
project.require = function() {
called = true;
return function() {};
};
});
});
afterEach(function() {
return tmp.teardown(projectPath);
});
it('config() finds and requires config/environment', function() {
project.config('development');
assert.equal(called, true);
});
it('configPath() returns tests/dummy/config/environment', function() {
project.pkg = {
'ember-addon': {
'configPath': 'tests/dummy/config'
}
};
var expected = path.normalize('tests/dummy/config/environment');
assert.equal(project.configPath(), expected);
});
it('calls getAddonsConfig', function() {
var addonConfigCalled = false;
project.getAddonsConfig = function() {
addonConfigCalled = true;
return {};
};
project.config('development');
assert.equal(addonConfigCalled, true);
});
it('returns getAddonsConfig result when configPath is not present', function() {
var expected = {
foo: 'bar'
};
return tmp.setup(projectPath) // ensure no config/environment.js is present
.then(function() {
project.getAddonsConfig = function() {
return expected;
};
var actual = project.config('development');
assert.deepEqual(actual, expected);
});
});
describe('merges getAddonsConfig result with app config', function() {
var projectConfig, addon1Config, addon2Config;
beforeEach(function() {
addon1Config = { addon: { derp: 'herp' } };
addon2Config = { addon: { blammo: 'blahzorz' } };
projectConfig = { foo: 'bar', baz: 'qux' };
project.addons = [
{ config: function() { return addon1Config; }},
{ config: function() { return addon2Config; }}
];
project._addonsInitialized = true;
project.require = function() {
return function() {
return projectConfig;
};
};
});
it('merges getAddonsConfig result with app config', function() {
var expected = {
foo: 'bar',
baz: 'qux',
addon: {
derp: 'herp',
blammo: 'blahzorz'
}
};
var actual = project.config('development');
assert.deepEqual(actual, expected);
});
it('getAddonsConfig does NOT override project config', function() {
var expected = {
foo: 'bar',
baz: 'qux',
addon: {
derp: 'herp',
blammo: 'blahzorz'
}
};
addon1Config.foo = 'NO!!!!!!';
var actual = project.config('development');
assert.deepEqual(actual, expected);
});
});
});
describe('addons', function() {
beforeEach(function() {
projectPath = path.resolve(__dirname, '../../fixtures/addon/simple');
var packageContents = require(path.join(projectPath, 'package.json'));
project = new Project(projectPath, packageContents);
project.initializeAddons();
});
it('returns a listing of all dependencies in the projects package.json', function() {
var expected = {
'ember-cli': 'latest',
'ember-random-addon': 'latest',
'ember-non-root-addon': 'latest',
'ember-generated-with-export-addon': 'latest',
'ember-generated-no-export-addon': 'latest',
'non-ember-thingy': 'latest',
'something-else': 'latest'
};
assert.deepEqual(project.dependencies(), expected);
});
it('returns a listing of all ember-cli-addons', function() {
var expected = [
'tests-server-middleware',
'history-support-middleware', 'serve-files-middleware',
'proxy-server-middleware', 'ember-random-addon', 'ember-non-root-addon',
'ember-generated-with-export-addon', 'ember-generated-no-export-addon',
'ember-yagni', 'ember-ng', 'ember-super-button'
];
project.buildAddonPackages();
assert.deepEqual(Object.keys(project.addonPackages), expected);
});
it('returns an instance of the addon', function() {
var addons = project.addons;
assert.equal(addons[4].name, 'Ember Non Root Addon');
});
it('addons get passed the project instance', function() {
var addons = project.addons;
assert.equal(addons[1].project, project);
});
it('returns an instance of an addon that uses `ember-addon-main`', function() {
var addons = project.addons;
assert.equal(addons[5].name, 'Ember Random Addon');
});
it('returns the default blueprints path', function() {
var expected = project.root + path.normalize('/blueprints');
assert.equal(project.localBlueprintLookupPath(), expected);
});
it('returns a listing of all addon blueprints paths', function() {
var expected = [project.root + path.normalize('/node_modules/ember-random-addon/blueprints')];
assert.deepEqual(project.addonBlueprintLookupPaths(), expected);
});
it('returns a listing of all blueprints paths', function() {
var expected = [
project.root + path.normalize('/blueprints'),
project.root + path.normalize('/node_modules/ember-random-addon/blueprints')
];
assert.deepEqual(project.blueprintLookupPaths(), expected);
});
it('returns an empty list of blueprint paths if outside a project', function() {
project.isEmberCLIProject = function() {
return false;
};
assert.deepEqual(project.blueprintLookupPaths(), []);
});
it('returns an instance of an addon with an object export', function() {
var addons = project.addons;
assert.ok(addons[6] instanceof Addon);
assert.equal(addons[6].name, 'Ember CLI Generated with export');
});
it('returns an instance of a generated addon with no export', function() {
var addons = project.addons;
assert.ok(addons[7] instanceof Addon);
assert.equal(addons[7].name, '(generated ember-generated-no-export-addon addon)');
});
it('adds the project itself if it is an addon', function() {
var added = false;
project.addonPackages = {};
project.isEmberCLIAddon = function() { return true; };
project.addIfAddon = function(path) {
if (path === project.root) {
added = true;
}
};
project.buildAddonPackages();
assert.ok(added);
});
});
describe('emberCLIVersion', function() {
it('should return the same value as the utlity function', function() {
assert.equal(project.emberCLIVersion(), emberCLIVersion());
});
});
describe('isEmberCLIAddon', function() {
beforeEach(function() {
projectPath = process.cwd() + '/tmp/test-app';
project = new Project(projectPath, {});
project.initializeAddons();
});
it('should return true if `ember-addon` is included in keywords', function() {
project.pkg = {
keywords: [ 'ember-addon' ]
};
assert.equal(project.isEmberCLIAddon(), true);
});
it('should return false if `ember-addon` is not included in keywords', function() {
project.pkg = {
keywords: [ ]
};
assert.equal(project.isEmberCLIAddon(), false);
});
});
});