From ab27246721029814ca3feb1264d09f3965b7d734 Mon Sep 17 00:00:00 2001 From: Pepe Cano <825430+ppcano@users.noreply.github.com> Date: Wed, 28 Nov 2018 10:48:10 +0100 Subject: [PATCH] Add blueprints for MU instance initializer --- blueprints/instance-initializer-test/index.js | 34 ++++- .../__testType__/__path__}/__name__-test.js | 2 +- .../__testType__/__path__}/__name__-test.js | 2 +- .../__testType__/__path__}/__name__-test.js | 2 +- blueprints/instance-initializer/index.js | 18 +++ .../instance-initializer-test-test.js | 80 ++++++++++++ .../blueprints/instance-initializer-test.js | 119 ++++++++++++++++++ .../module-unification/default.js | 25 ++++ .../module-unification/dummy.js | 25 ++++ .../module-unification/mocha.js | 30 +++++ .../module-unification/rfc232.js | 28 +++++ 11 files changed, 361 insertions(+), 4 deletions(-) rename blueprints/instance-initializer-test/mocha-files/{tests/unit/instance-initializers => __root__/__testType__/__path__}/__name__-test.js (87%) rename blueprints/instance-initializer-test/qunit-files/{tests/unit/instance-initializers => __root__/__testType__/__path__}/__name__-test.js (87%) rename blueprints/instance-initializer-test/qunit-rfc-232-files/{tests/unit/instance-initializers => __root__/__testType__/__path__}/__name__-test.js (90%) create mode 100644 node-tests/fixtures/instance-initializer-test/module-unification/default.js create mode 100644 node-tests/fixtures/instance-initializer-test/module-unification/dummy.js create mode 100644 node-tests/fixtures/instance-initializer-test/module-unification/mocha.js create mode 100644 node-tests/fixtures/instance-initializer-test/module-unification/rfc232.js diff --git a/blueprints/instance-initializer-test/index.js b/blueprints/instance-initializer-test/index.js index 9b5282c7b85..64f6bc22cd9 100644 --- a/blueprints/instance-initializer-test/index.js +++ b/blueprints/instance-initializer-test/index.js @@ -5,13 +5,45 @@ 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: function() { + if (isModuleUnificationProject(this.project)) { + return { + __root__(options) { + if (options.pod) { + throw new Error('Pods arenʼt supported within a module unification app'); + } else if (options.inDummy) { + return path.join('tests', 'dummy', 'src', 'init'); + } + return path.join('src', 'init'); + }, + __testType__() { + return ''; + }, + }; + } else { + return { + __root__() { + return 'tests'; + }, + __testType__() { + return 'unit'; + }, + }; + } + }, locals: function(options) { + let modulePrefix = stringUtils.dasherize(options.project.config().modulePrefix); + if (isModuleUnificationProject(this.project)) { + modulePrefix += '/init'; + } return { friendlyTestName: ['Unit', 'Instance Initializer', options.entity.name].join(' | '), - dasherizedModulePrefix: stringUtils.dasherize(options.project.config().modulePrefix), + modulePrefix, destroyAppExists: fs.existsSync( path.join(this.project.root, '/tests/helpers/destroy-app.js') ), 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__/__path__/__name__-test.js similarity index 87% 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__/__path__/__name__-test.js index 4c33d9ca485..9796282d8ed 100644 --- a/blueprints/instance-initializer-test/mocha-files/tests/unit/instance-initializers/__name__-test.js +++ b/blueprints/instance-initializer-test/mocha-files/__root__/__testType__/__path__/__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 '<%= modulePrefix %>/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__/__path__/__name__-test.js similarity index 87% 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__/__path__/__name__-test.js index 7c9825b7ee2..c8517e099a9 100644 --- a/blueprints/instance-initializer-test/qunit-files/tests/unit/instance-initializers/__name__-test.js +++ b/blueprints/instance-initializer-test/qunit-files/__root__/__testType__/__path__/__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 '<%= modulePrefix %>/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__/__path__/__name__-test.js similarity index 90% 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__/__path__/__name__-test.js index 7a5a4177311..89646575078 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__/__path__/__name__-test.js @@ -1,6 +1,6 @@ import Application from '@ember/application'; -import { initialize } from '<%= dasherizedModulePrefix %>/instance-initializers/<%= dasherizedModuleName %>'; +import { initialize } from '<%= modulePrefix %>/instance-initializers/<%= dasherizedModuleName %>'; import { module, test } from '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..533141bff4f 100644 --- a/blueprints/instance-initializer/index.js +++ b/blueprints/instance-initializer/index.js @@ -1,5 +1,23 @@ 'use strict'; +const path = require('path'); +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 new Error('Pods arenʼt supported within a module unification app'); + } else if (options.inDummy) { + return path.join('tests', 'dummy', 'src/init'); + } + return 'src/init'; + }, + }; + } + }, }; diff --git a/node-tests/blueprints/instance-initializer-test-test.js b/node-tests/blueprints/instance-initializer-test-test.js index c9bd33b81fd..7f3b28f4586 100644 --- a/node-tests/blueprints/instance-initializer-test-test.js +++ b/node-tests/blueprints/instance-initializer-test-test.js @@ -11,6 +11,7 @@ const expect = chai.expect; const generateFakePackageManifest = require('../helpers/generate-fake-package-manifest'); const fixture = require('../helpers/fixture'); +const fs = require('fs-extra'); describe('Blueprint: instance-initializer-test', function() { setupTestHooks(this); @@ -85,4 +86,83 @@ describe('Blueprint: instance-initializer-test', function() { }); }); }); + + describe('in app - module unification', function() { + beforeEach(function() { + return emberNew().then(() => fs.ensureDirSync('src')); + }); + + describe('with ember-cli-qunit@4.1.0', function() { + beforeEach(function() { + generateFakePackageManifest('ember-cli-qunit', '4.1.0'); + }); + + it('instance-initializer-test foo', function() { + return emberGenerateDestroy(['instance-initializer-test', 'foo'], _file => { + expect(_file('src/init/instance-initializers/foo-test.js')).to.equal( + fixture('instance-initializer-test/module-unification/default.js') + ); + }); + }); + }); + + describe('with ember-cli-qunit@4.2.0', function() { + beforeEach(function() { + generateFakePackageManifest('ember-cli-qunit', '4.2.0'); + }); + + it('instance-initializer-test foo', function() { + return emberGenerateDestroy(['instance-initializer-test', 'foo'], _file => { + expect(_file('src/init/instance-initializers/foo-test.js')).to.equal( + fixture('instance-initializer-test/module-unification/rfc232.js') + ); + }); + }); + }); + + describe('with ember-cli-mocha', function() { + beforeEach(function() { + modifyPackages([ + { name: 'ember-cli-qunit', delete: true }, + { name: 'ember-cli-mocha', dev: true }, + ]); + }); + + it('instance-initializer-test foo for mocha', function() { + return emberGenerateDestroy(['instance-initializer-test', 'foo'], _file => { + expect(_file('src/init/instance-initializers/foo-test.js')).to.equal( + fixture('instance-initializer-test/module-unification/mocha.js') + ); + }); + }); + }); + }); + + describe('in addon - module unification', function() { + beforeEach(function() { + return emberNew({ target: 'addon' }).then(() => fs.ensureDirSync('src')); + }); + + describe('with ember-cli-qunit@4.1.0', function() { + beforeEach(function() { + generateFakePackageManifest('ember-cli-qunit', '4.1.0'); + }); + + it('instance-initializer-test foo', function() { + return emberGenerateDestroy(['instance-initializer-test', 'foo'], _file => { + expect(_file('src/init/instance-initializers/foo-test.js')).to.equal( + fixture('instance-initializer-test/module-unification/dummy.js') + ); + }); + }); + + it('instance-initializer-test foo --dummy', function() { + return emberGenerateDestroy(['instance-initializer-test', 'foo', '--dummy'], _file => { + expect(_file('tests/dummy/src/init/instance-initializers/foo-test.js')).to.equal( + fixture('instance-initializer-test/module-unification/dummy.js') + ); + }); + }); + }); + }); }); diff --git a/node-tests/blueprints/instance-initializer-test.js b/node-tests/blueprints/instance-initializer-test.js index 3fd72c385db..90ee7e6778e 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'); const generateFakePackageManifest = require('../helpers/generate-fake-package-manifest'); const fixture = require('../helpers/fixture'); @@ -184,4 +186,121 @@ describe('Blueprint: instance-initializer', function() { ); }); }); + + describe('in app - module unification', function() { + beforeEach(function() { + return emberNew() + .then(() => fs.ensureDirSync('src')) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('instance-initializer foo', function() { + return emberGenerateDestroy(['instance-initializer', 'foo'], _file => { + expect(_file('src/init/instance-initializers/foo.js')).to.equal( + fixture('instance-initializer/instance-initializer.js') + ); + + expect(_file('src/init/instance-initializers/foo-test.js')).to.contain( + "import { initialize } from 'my-app/init/instance-initializers/foo';" + ); + }); + }); + + it('instance-initializer foo/bar', function() { + return emberGenerateDestroy(['instance-initializer', 'foo/bar'], _file => { + expect(_file('src/init/instance-initializers/foo/bar.js')).to.equal( + fixture('instance-initializer/instance-initializer-nested.js') + ); + + expect(_file('src/init/instance-initializers/foo/bar-test.js')).to.contain( + "import { initialize } from 'my-app/init/instance-initializers/foo/bar';" + ); + }); + }); + + it('instance-initializer foo --pod', function() { + return expectError( + emberGenerateDestroy(['instance-initializer', 'foo', '--pod']), + 'Pods arenʼt supported within a module unification app' + ); + }); + + it('instance-initializer foo/bar --pod', function() { + return expectError( + emberGenerateDestroy(['instance-initializer', 'foo/bar', '--pod']), + 'Pods arenʼt supported within a module unification app' + ); + }); + + describe('with podModulePrefix', function() { + beforeEach(function() { + setupPodConfig({ podModulePrefix: true }); + }); + + it('instance-initializer foo --pod', function() { + return expectError( + emberGenerateDestroy(['instance-initializer', 'foo', '--pod']), + 'Pods arenʼt supported within a module unification app' + ); + }); + + it('instance-initializer foo/bar --pod', function() { + return expectError( + emberGenerateDestroy(['instance-initializer', 'foo/bar', '--pod']), + 'Pods arenʼt supported within a module unification app' + ); + }); + }); + }); + describe('in addon - module unification', function() { + beforeEach(function() { + return emberNew({ target: 'addon' }) + .then(() => fs.ensureDirSync('src')) + .then(() => generateFakePackageManifest('ember-cli-qunit', '4.1.0')); + }); + + it('instance-initializer foo', function() { + return emberGenerateDestroy(['instance-initializer', 'foo'], _file => { + expect(_file('src/init/instance-initializers/foo.js')).to.equal( + fixture('instance-initializer/instance-initializer.js') + ); + + expect(_file('tests/unit/instance-initializers/foo-test.js')); + }); + }); + + it('instance-initializer foo/bar', function() { + return emberGenerateDestroy(['instance-initializer', 'foo/bar'], _file => { + expect(_file('src/init/instance-initializers/foo/bar.js')).to.equal( + fixture('instance-initializer/instance-initializer-nested.js') + ); + + expect(_file('src/init/instance-initializers/foo/bar-test.js')); + }); + }); + + it('instance-initializer foo --dummy', function() { + return emberGenerateDestroy(['instance-initializer', 'foo', '--dummy'], _file => { + expect(_file('tests/dummy/src/init/instance-initializers/foo.js')).to.equal( + fixture('instance-initializer/instance-initializer.js') + ); + + expect(_file('src/init/instance-initializers/foo.js')).to.not.exist; + + expect(_file('src/init/instance-initializers/foo-test.js')).to.not.exist; + }); + }); + + it('instance-initializer foo/bar --dummy', function() { + return emberGenerateDestroy(['instance-initializer', 'foo/bar', '--dummy'], _file => { + expect(_file('tests/dummy/src/init/instance-initializers/foo/bar.js')).to.equal( + fixture('instance-initializer/instance-initializer-nested.js') + ); + + expect(_file('src/init/instance-initializers/foo/bar.js')).to.not.exist; + + expect(_file('src/init/instance-initializers/foo/bar-test.js')).to.not.exist; + }); + }); + }); }); diff --git a/node-tests/fixtures/instance-initializer-test/module-unification/default.js b/node-tests/fixtures/instance-initializer-test/module-unification/default.js new file mode 100644 index 00000000000..3e2d2342483 --- /dev/null +++ b/node-tests/fixtures/instance-initializer-test/module-unification/default.js @@ -0,0 +1,25 @@ +import Application from '@ember/application'; +import { run } from '@ember/runloop'; +import { initialize } from 'my-app/init/instance-initializers/foo'; +import { module, test } from 'qunit'; + +module('Unit | Instance Initializer | foo', { + beforeEach() { + run(() => { + this.application = Application.create(); + this.appInstance = this.application.buildInstance(); + }); + }, + afterEach() { + run(this.appInstance, 'destroy'); + run(this.application, 'destroy'); + } +}); + +// Replace this with your real tests. +test('it works', function(assert) { + initialize(this.appInstance); + + // you would normally confirm the results of the initializer here + assert.ok(true); +}); diff --git a/node-tests/fixtures/instance-initializer-test/module-unification/dummy.js b/node-tests/fixtures/instance-initializer-test/module-unification/dummy.js new file mode 100644 index 00000000000..504c83a7d39 --- /dev/null +++ b/node-tests/fixtures/instance-initializer-test/module-unification/dummy.js @@ -0,0 +1,25 @@ +import Application from '@ember/application'; +import { run } from '@ember/runloop'; +import { initialize } from 'dummy/init/instance-initializers/foo'; +import { module, test } from 'qunit'; + +module('Unit | Instance Initializer | foo', { + beforeEach() { + run(() => { + this.application = Application.create(); + this.appInstance = this.application.buildInstance(); + }); + }, + afterEach() { + run(this.appInstance, 'destroy'); + run(this.application, 'destroy'); + } +}); + +// Replace this with your real tests. +test('it works', function(assert) { + initialize(this.appInstance); + + // you would normally confirm the results of the initializer here + assert.ok(true); +}); diff --git a/node-tests/fixtures/instance-initializer-test/module-unification/mocha.js b/node-tests/fixtures/instance-initializer-test/module-unification/mocha.js new file mode 100644 index 00000000000..c2d653bdc59 --- /dev/null +++ b/node-tests/fixtures/instance-initializer-test/module-unification/mocha.js @@ -0,0 +1,30 @@ +import { expect } from 'chai'; +import { describe, it, beforeEach } from 'mocha'; +import Application from '@ember/application'; +import { run } from '@ember/runloop'; +import { initialize } from 'my-app/init/instance-initializers/foo'; +import destroyApp from '../../helpers/destroy-app'; + +describe('Unit | Instance Initializer | foo', function() { + let application, appInstance; + + beforeEach(function() { + run(function() { + application = Application.create(); + appInstance = application.buildInstance(); + }); + }); + + afterEach(function() { + run(appInstance, 'destroy'); + destroyApp(application); + }); + + // Replace this with your real tests. + it('works', function() { + initialize(appInstance); + + // you would normally confirm the results of the initializer here + expect(true).to.be.ok; + }); +}); diff --git a/node-tests/fixtures/instance-initializer-test/module-unification/rfc232.js b/node-tests/fixtures/instance-initializer-test/module-unification/rfc232.js new file mode 100644 index 00000000000..34ccc5dcfea --- /dev/null +++ b/node-tests/fixtures/instance-initializer-test/module-unification/rfc232.js @@ -0,0 +1,28 @@ +import Application from '@ember/application'; + +import { initialize } from 'my-app/init/instance-initializers/foo'; +import { module, test } from 'qunit'; +import { run } from '@ember/runloop'; + +module('Unit | Instance Initializer | foo', function(hooks) { + hooks.beforeEach(function() { + this.TestApplication = Application.extend(); + this.TestApplication.instanceInitializer({ + name: 'initializer under test', + initialize + }); + this.application = this.TestApplication.create({ autoboot: false }); + this.instance = this.application.buildInstance(); + }); + hooks.afterEach(function() { + run(this.application, 'destroy'); + run(this.instance, 'destroy'); + }); + + // Replace this with your real tests. + test('it works', async function(assert) { + await this.instance.boot(); + + assert.ok(true); + }); +});