diff --git a/blueprints/instance-initializer-addon/index.js b/blueprints/instance-initializer-addon/index.js index d964eeb1864..3e45bed81d8 100644 --- a/blueprints/instance-initializer-addon/index.js +++ b/blueprints/instance-initializer-addon/index.js @@ -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; diff --git a/blueprints/instance-initializer-test/index.js b/blueprints/instance-initializer-test/index.js index 9b5282c7b85..a2a01603486 100644 --- a/blueprints/instance-initializer-test/index.js +++ b/blueprints/instance-initializer-test/index.js @@ -5,9 +5,35 @@ 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(' | '), @@ -15,6 +41,7 @@ module.exports = useTestFrameworkDetector({ destroyAppExists: fs.existsSync( path.join(this.project.root, '/tests/helpers/destroy-app.js') ), + isModuleUnificationApp: fs.existsSync(path.join(this.project.root, '/src')), }; }, }); diff --git a/blueprints/instance-initializer-test/mocha-files/tests/unit/instance-initializers/__name__-test.js b/blueprints/instance-initializer-test/mocha-files/__root__/__testType__/instance-initializers/__name__-test.js similarity index 82% rename from blueprints/instance-initializer-test/mocha-files/tests/unit/instance-initializers/__name__-test.js rename to blueprints/instance-initializer-test/mocha-files/__root__/__testType__/instance-initializers/__name__-test.js index 4c33d9ca485..89ab5e30389 100644 --- a/blueprints/instance-initializer-test/mocha-files/tests/unit/instance-initializers/__name__-test.js +++ b/blueprints/instance-initializer-test/mocha-files/__root__/__testType__/instance-initializers/__name__-test.js @@ -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() { diff --git a/blueprints/instance-initializer-test/qunit-files/tests/unit/instance-initializers/__name__-test.js b/blueprints/instance-initializer-test/qunit-files/__root__/__testType__/instance-initializers/__name__-test.js similarity index 82% rename from blueprints/instance-initializer-test/qunit-files/tests/unit/instance-initializers/__name__-test.js rename to blueprints/instance-initializer-test/qunit-files/__root__/__testType__/instance-initializers/__name__-test.js index 7c9825b7ee2..a724617ed16 100644 --- a/blueprints/instance-initializer-test/qunit-files/tests/unit/instance-initializers/__name__-test.js +++ b/blueprints/instance-initializer-test/qunit-files/__root__/__testType__/instance-initializers/__name__-test.js @@ -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';<% } %> diff --git a/blueprints/instance-initializer-test/qunit-rfc-232-files/tests/unit/instance-initializers/__name__-test.js b/blueprints/instance-initializer-test/qunit-rfc-232-files/__root__/__testType__/instance-initializers/__name__-test.js similarity index 86% rename from blueprints/instance-initializer-test/qunit-rfc-232-files/tests/unit/instance-initializers/__name__-test.js rename to blueprints/instance-initializer-test/qunit-rfc-232-files/__root__/__testType__/instance-initializers/__name__-test.js index 0e67d1414d7..0fb0edb99c9 100644 --- a/blueprints/instance-initializer-test/qunit-rfc-232-files/tests/unit/instance-initializers/__name__-test.js +++ b/blueprints/instance-initializer-test/qunit-rfc-232-files/__root__/__testType__/instance-initializers/__name__-test.js @@ -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';<% } %> diff --git a/blueprints/instance-initializer/index.js b/blueprints/instance-initializer/index.js index 79c87c1db92..261f0c0d3ac 100644 --- a/blueprints/instance-initializer/index.js +++ b/blueprints/instance-initializer/index.js @@ -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'; + }, + }; + } + }, }; diff --git a/node-tests/blueprints/instance-initializer-test.js b/node-tests/blueprints/instance-initializer-test.js index 0f19628ff46..125f6b23074 100644 --- a/node-tests/blueprints/instance-initializer-test.js +++ b/node-tests/blueprints/instance-initializer-test.js @@ -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); @@ -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' }); @@ -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' });