Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion blueprints/instance-initializer-addon/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
'use strict';

module.exports = require('../-addon-import');
let addonImport = require('../-addon-import');
const isModuleUnificationProject = require('../module-unification').isModuleUnificationProject;

addonImport.fileMapTokens = function() {
if (isModuleUnificationProject(this.project)) {
return {
__root__() {
return 'src/init';
},
};
}
};

module.exports = addonImport;
27 changes: 27 additions & 0 deletions blueprints/instance-initializer-test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,43 @@ const path = require('path');
const stringUtils = require('ember-cli-string-utils');

const useTestFrameworkDetector = require('../test-framework-detector');
const isModuleUnificationProject = require('../module-unification').isModuleUnificationProject;

module.exports = useTestFrameworkDetector({
description: 'Generates an instance initializer unit test.',
fileMapTokens() {
if (isModuleUnificationProject(this.project)) {
return {
__root__(options) {
if (options.pod) {
throw "Pods aren't supported within a module unification app";
}

return 'src/init';
},
__testType__() {
return '';
},
};
} else {
return {
__root__() {
return 'tests';
},
__testType__() {
return 'unit';
},
};
}
},
locals: function(options) {
return {
friendlyTestName: ['Unit', 'Instance Initializer', options.entity.name].join(' | '),
dasherizedModulePrefix: stringUtils.dasherize(options.project.config().modulePrefix),
destroyAppExists: fs.existsSync(
path.join(this.project.root, '/tests/helpers/destroy-app.js')
),
isModuleUnificationApp: fs.existsSync(path.join(this.project.root, '/src')),
};
},
});
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { expect } from 'chai';
import { describe, it, beforeEach } from 'mocha';
import Application from '@ember/application';
import { run } from '@ember/runloop';
import { initialize } from '<%= dasherizedModulePrefix %>/instance-initializers/<%= dasherizedModuleName %>';
import { initialize } from '<%= dasherizedModulePrefix %>/<% if (isModuleUnificationApp) { %>src/init/<% } %>instance-initializers/<%= dasherizedModuleName %>';
import destroyApp from '../../helpers/destroy-app';

describe('<%= friendlyTestName %>', function() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Application from '@ember/application';
import { run } from '@ember/runloop';
import { initialize } from '<%= dasherizedModulePrefix %>/instance-initializers/<%= dasherizedModuleName %>';
import { initialize } from '<%= dasherizedModulePrefix %>/<% if (isModuleUnificationApp) { %>src/init/<% } %>instance-initializers/<%= dasherizedModuleName %>';
import { module, test } from 'qunit';<% if (destroyAppExists) { %>
import destroyApp from '../../helpers/destroy-app';<% } %>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Application from '@ember/application';

import { initialize } from '<%= dasherizedModulePrefix %>/instance-initializers/<%= dasherizedModuleName %>';
import { initialize } from '<%= dasherizedModulePrefix %>/<% if (isModuleUnificationApp) { %>src/init/<% } %>instance-initializers/<%= dasherizedModuleName %>';
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
<% if (destroyAppExists) { %>import destroyApp from '../../helpers/destroy-app';<% } else { %>import { run } from '@ember/runloop';<% } %>
Expand Down
16 changes: 16 additions & 0 deletions blueprints/instance-initializer/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
'use strict';

const isModuleUnificationProject = require('../module-unification').isModuleUnificationProject;

module.exports = {
description: 'Generates an instance initializer.',

fileMapTokens() {
if (isModuleUnificationProject(this.project)) {
return {
__root__(options) {
if (options.pod) {
throw "Pods aren't supported within a module unification app";
}

return 'src/init';
},
};
}
},
};
97 changes: 97 additions & 0 deletions node-tests/blueprints/instance-initializer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ const setupTestHooks = blueprintHelpers.setupTestHooks;
const emberNew = blueprintHelpers.emberNew;
const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy;
const setupPodConfig = blueprintHelpers.setupPodConfig;
const expectError = require('../helpers/expect-error');

const chai = require('ember-cli-blueprint-test-helpers/chai');
const expect = chai.expect;
const fs = require('fs-extra');

describe('Blueprint: instance-initializer', function() {
setupTestHooks(this);
Expand Down Expand Up @@ -116,6 +118,59 @@ describe('Blueprint: instance-initializer', function() {
});
});

describe('in app - module unification', function() {
beforeEach(function() {
return emberNew().then(() => fs.ensureDirSync('src'));
});

it('instance-initializer foo', function() {
return emberGenerateDestroy(['instance-initializer', 'foo'], _file => {
expect(_file('src/init/instance-initializers/foo.js')).to.contain(
'export function initialize(/* appInstance */) {\n' +
" // appInstance.inject('route', 'foo', 'service:foo');\n" +
'}\n' +
'\n' +
'export default {\n' +
' initialize\n' +
'};'
);

expect(_file('src/init/instance-initializers/foo-test.js')).to.contain(
"import { initialize } from 'my-app/src/init/instance-initializers/foo';"
);

expect(_file('app/instance-initializers/foo-test.js')).to.not.exist;
});
});

it('instance-initializer foo/bar', function() {
return emberGenerateDestroy(['instance-initializer', 'foo/bar'], _file => {
expect(_file('src/init/instance-initializers/foo/bar.js')).to.contain(
'export function initialize(/* appInstance */) {\n' +
" // appInstance.inject('route', 'foo', 'service:foo');\n" +
'}\n' +
'\n' +
'export default {\n' +
' initialize\n' +
'};'
);

expect(_file('src/init/instance-initializers/foo/bar-test.js')).to.contain(
"import { initialize } from 'my-app/src/init/instance-initializers/foo/bar';"
);

expect(_file('tests/unit/instance-initializers/foo/bar-test.js')).to.not.exist;
});
});

it('instance-initializer foo --pod', function() {
return expectError(
emberGenerateDestroy(['instance-initializer', 'foo', '--pod']),
"Pods aren't supported within a module unification app"
);
});
});

describe('in addon', function() {
beforeEach(function() {
return emberNew({ target: 'addon' });
Expand Down Expand Up @@ -198,6 +253,48 @@ describe('Blueprint: instance-initializer', function() {
});
});

describe('in addon - module unification', function() {
beforeEach(function() {
return emberNew({ target: 'addon' }).then(() => fs.ensureDirSync('src'));
});

it('instance-initializer foo', function() {
return emberGenerateDestroy(['instance-initializer', 'foo'], _file => {
expect(_file('src/init/instance-initializers/foo.js')).to.contain(
'export function initialize(/* appInstance */) {\n' +
" // appInstance.inject('route', 'foo', 'service:foo');\n" +
'}\n' +
'\n' +
'export default {\n' +
' initialize\n' +
'};'
);

expect(_file('src/init/instance-initializers/foo-test.js'));

expect(_file('app/instance-initializers/foo.js')).to.not.exist;
});
});

it('instance-initializer foo/bar', function() {
return emberGenerateDestroy(['instance-initializer', 'foo/bar'], _file => {
expect(_file('src/init/instance-initializers/foo/bar.js')).to.contain(
'export function initialize(/* appInstance */) {\n' +
" // appInstance.inject('route', 'foo', 'service:foo');\n" +
'}\n' +
'\n' +
'export default {\n' +
' initialize\n' +
'};'
);

expect(_file('app/src/instance-initializers/foo/bar-test.js'));

expect(_file('app/instance-initializers/foo/bar.js')).to.not.exist;
});
});
});

describe('in in-repo-addon', function() {
beforeEach(function() {
return emberNew({ target: 'in-repo-addon' });
Expand Down