UNPKG

ember-cli-ajh

Version:

Command line tool for developing ambitious ember.js apps

1,578 lines (1,470 loc) 67.2 kB
/*jshint quotmark: false*/ 'use strict'; var Promise = require('../../lib/ext/promise'); var assertFile = require('../helpers/assert-file'); var assertFileEquals = require('../helpers/assert-file-equals'); var conf = require('../helpers/conf'); var ember = require('../helpers/ember'); var replaceFile = require('../helpers/file-utils').replaceFile; var fs = require('fs-extra'); var outputFile = Promise.denodeify(fs.outputFile); var path = require('path'); var remove = Promise.denodeify(fs.remove); var root = process.cwd(); var tmp = require('tmp-sync'); var tmproot = path.join(root, 'tmp'); var EOL = require('os').EOL; var expect = require('chai').expect; var BlueprintNpmTask = require('../helpers/disable-npm-on-blueprint'); describe('Acceptance: ember generate pod', function() { this.timeout(5000); var tmpdir; before(function() { BlueprintNpmTask.disableNPM(); conf.setup(); }); after(function() { BlueprintNpmTask.restoreNPM(); conf.restore(); }); beforeEach(function() { tmpdir = tmp.in(tmproot); process.chdir(tmpdir); }); afterEach(function() { this.timeout(10000); process.chdir(root); return remove(tmproot); }); function initApp() { return ember([ 'init', '--name=my-app', '--skip-npm', '--skip-bower' ]); } function initAddon() { return ember([ 'addon', 'my-addon', '--skip-npm', '--skip-bower' ]); } function initInRepoAddon() { return initApp().then(function() { return ember([ 'generate', 'in-repo-addon', 'my-addon' ]); }); } function preGenerate(args) { var generateArgs = ['generate'].concat(args); return initApp().then(function() { return ember(generateArgs); }); } function generate(args) { var generateArgs = ['generate'].concat(args); return initApp().then(function() { return ember(generateArgs); }); } function generateWithPrefix(args) { var generateArgs = ['generate'].concat(args); return initApp().then(function() { replaceFile('config/environment.js', "var ENV = {", "var ENV = {" + EOL + "podModulePrefix: 'app/pods', " + EOL); return ember(generateArgs); }); } function generateWithUsePods(args) { var generateArgs = ['generate'].concat(args); return initApp().then(function() { replaceFile('.ember-cli', '"disableAnalytics": false', '"disableAnalytics": false,' + EOL + '"usePods" : true' + EOL); return ember(generateArgs); }); } function generateWithUsePodsDeprecated(args) { var generateArgs = ['generate'].concat(args); return initApp().then(function() { replaceFile('config/environment.js', "var ENV = {", "var ENV = {" + EOL + "usePodsByDefault: true, " + EOL); return ember(generateArgs); }); } function generateInAddon(args) { var generateArgs = ['generate'].concat(args); return initAddon().then(function() { return ember(generateArgs); }); } function generateInRepoAddon(args) { var generateArgs = ['generate'].concat(args); return initInRepoAddon().then(function() { return ember(generateArgs); }); } it('.ember-cli usePods setting generates in pod structure without --pod flag', function() { return generateWithUsePods(['controller', 'foo']).then(function() { assertFile('app/foo/controller.js', { contains: [ "import Ember from 'ember';", "export default Ember.Controller.extend({" + EOL + "});" ] }); assertFile('tests/unit/foo/controller-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('controller:foo'" ] }); }); }); it('.ember-cli usePods setting generates in classic structure with --classic flag', function() { return generateWithUsePods(['controller', 'foo', '--classic']).then(function() { assertFile('app/controllers/foo.js', { contains: [ "import Ember from 'ember';", "export default Ember.Controller.extend({" + EOL + "});" ] }); assertFile('tests/unit/controllers/foo-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('controller:foo'" ] }); }); }); it('.ember-cli usePods setting generates correct component structure', function() { return generateWithUsePods(['component', 'x-foo']).then(function() { assertFile('app/components/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/components/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/components/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('x-foo'", "integration: true" ] }); }); }); it('controller foo --pod', function() { return generate(['controller', 'foo', '--pod']).then(function() { assertFile('app/foo/controller.js', { contains: [ "import Ember from 'ember';", "export default Ember.Controller.extend({" + EOL + "});" ] }); assertFile('tests/unit/foo/controller-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('controller:foo'" ] }); }); }); it('controller foo --pod podModulePrefix', function() { return generateWithPrefix(['controller', 'foo', '--pod']).then(function() { assertFile('app/pods/foo/controller.js', { contains: [ "import Ember from 'ember';", "export default Ember.Controller.extend({" + EOL + "});" ] }); assertFile('tests/unit/pods/foo/controller-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('controller:foo'" ] }); }); }); it('controller foo/bar --pod', function() { return generate(['controller', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/controller.js', { contains: [ "import Ember from 'ember';", "export default Ember.Controller.extend({" + EOL + "});" ] }); assertFile('tests/unit/foo/bar/controller-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('controller:foo/bar'" ] }); }); }); it('controller foo/bar --pod podModulePrefix', function() { return generateWithPrefix(['controller', 'foo/bar', '--pod']).then(function() { assertFile('app/pods/foo/bar/controller.js', { contains: [ "import Ember from 'ember';", "export default Ember.Controller.extend({" + EOL + "});" ] }); assertFile('tests/unit/pods/foo/bar/controller-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('controller:foo/bar'" ] }); }); }); it('component x-foo --pod', function() { return generate(['component', 'x-foo', '--pod']).then(function() { assertFile('app/components/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/components/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/components/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('x-foo'", "integration: true" ] }); }); }); it('component x-foo --pod podModulePrefix', function() { return generateWithPrefix(['component', 'x-foo', '--pod']).then(function() { assertFile('app/pods/components/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/components/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/components/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('x-foo'", "integration: true", "{{x-foo}}", "{{#x-foo}}" ] }); }); }); it('component foo/x-foo --pod', function() { return generate(['component', 'foo/x-foo', '--pod']).then(function() { assertFile('app/components/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/components/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/components/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('foo/x-foo'", "integration: true", "{{foo/x-foo}}", "{{#foo/x-foo}}" ] }); }); }); it('component foo/x-foo --pod podModulePrefix', function() { return generateWithPrefix(['component', 'foo/x-foo', '--pod']).then(function() { assertFile('app/pods/components/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/components/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/components/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('foo/x-foo'", "integration: true", "{{foo/x-foo}}", "{{#foo/x-foo}}" ] }); }); }); it('component x-foo --pod --path', function() { return generate(['component', 'x-foo', '--pod', '--path', 'bar']).then(function() { assertFile('app/bar/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/bar/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/bar/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('bar/x-foo'", "integration: true", "{{bar/x-foo}}", "{{#bar/x-foo}}" ] }); }); }); it('component x-foo --pod --path podModulePrefix', function() { return generateWithPrefix(['component', 'x-foo', '--pod', '--path', 'bar']).then(function() { assertFile('app/pods/bar/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/bar/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/bar/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('bar/x-foo'", "integration: true", "{{bar/x-foo}}", "{{#bar/x-foo}}" ] }); }); }); it('component foo/x-foo --pod --path', function() { return generate(['component', 'foo/x-foo', '--pod', '--path', 'bar']).then(function() { assertFile('app/bar/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/bar/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/bar/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('bar/foo/x-foo'", "integration: true", "{{bar/foo/x-foo}}", "{{#bar/foo/x-foo}}" ] }); }); }); it('component foo/x-foo --pod --path podModulePrefix', function() { return generateWithPrefix(['component', 'foo/x-foo', '--pod', '--path', 'bar']).then(function() { assertFile('app/pods/bar/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/bar/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/bar/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "moduleForComponent('bar/foo/x-foo'", "integration: true", "{{bar/foo/x-foo}}", "{{#bar/foo/x-foo}}" ] }); }); }); it('component x-foo --pod --path nested', function() { return generate(['component', 'x-foo', '--pod', '--path', 'bar/baz']).then(function() { assertFile('app/bar/baz/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/bar/baz/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/bar/baz/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('bar/baz/x-foo'", "integration: true", "{{bar/baz/x-foo}}", "{{#bar/baz/x-foo}}" ] }); }); }); it('component x-foo --pod --path nested podModulePrefix', function() { return generateWithPrefix(['component', 'x-foo', '--pod', '--path', 'bar/baz']).then(function() { assertFile('app/pods/bar/baz/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/bar/baz/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/bar/baz/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('bar/baz/x-foo'", "integration: true", "{{bar/baz/x-foo}}", "{{#bar/baz/x-foo}}" ] }); }); }); it('component foo/x-foo --pod --path nested', function() { return generate(['component', 'foo/x-foo', '--pod', '--path', 'bar/baz']).then(function() { assertFile('app/bar/baz/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/bar/baz/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/bar/baz/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('bar/baz/foo/x-foo'", "integration: true", "{{bar/baz/foo/x-foo}}", "{{#bar/baz/foo/x-foo}}" ] }); }); }); it('component foo/x-foo --pod --path nested podModulePrefix', function() { return generateWithPrefix(['component', 'foo/x-foo', '--pod', '--path', 'bar/baz']).then(function() { assertFile('app/pods/bar/baz/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/bar/baz/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/bar/baz/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('bar/baz/foo/x-foo'", "integration: true", "{{bar/baz/foo/x-foo}}", "{{#bar/baz/foo/x-foo}}" ] }); }); }); it('component x-foo --pod -no-path', function() { return generate(['component', 'x-foo', '--pod', '-no-path']).then(function() { assertFile('app/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('x-foo'", "integration: true", "{{x-foo}}", "{{#x-foo}}" ] }); }); }); it('component x-foo --pod -no-path podModulePrefix', function() { return generateWithPrefix(['component', 'x-foo', '--pod', '-no-path']).then(function() { assertFile('app/pods/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('x-foo'", "integration: true", "{{x-foo}}", "{{#x-foo}}" ] }); }); }); it('component foo/x-foo --pod -no-path', function() { return generate(['component', 'foo/x-foo', '--pod', '-no-path']).then(function() { assertFile('app/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('foo/x-foo'", "integration: true", "{{foo/x-foo}}", "{{#foo/x-foo}}" ] }); }); }); it('component foo/x-foo --pod -no-path podModulePrefix', function() { return generateWithPrefix(['component', 'foo/x-foo', '--pod', '-no-path']).then(function() { assertFile('app/pods/foo/x-foo/component.js', { contains: [ "import Ember from 'ember';", "export default Ember.Component.extend({", "});" ] }); assertFile('app/pods/foo/x-foo/template.hbs', { contains: "{{yield}}" }); assertFile('tests/integration/pods/foo/x-foo/component-test.js', { contains: [ "import { moduleForComponent, test } from 'ember-qunit';", "import hbs from 'htmlbars-inline-precompile';", "moduleForComponent('foo/x-foo'", "integration: true", "{{foo/x-foo}}", "{{#foo/x-foo}}" ] }); }); }); it('helper foo-bar --pod', function() { return generate(['helper', 'foo-bar', '--pod']).then(function() { assertFile('app/helpers/foo-bar.js', { contains: "import Ember from 'ember';" + EOL + EOL + "export function fooBar(params/*, hash*/) {" + EOL + " return params;" + EOL + "}" + EOL + EOL + "export default Ember.Helper.helper(fooBar);" }); assertFile('tests/unit/helpers/foo-bar-test.js', { contains: "import { fooBar } from '../../../helpers/foo-bar';" }); }); }); it('helper foo-bar --pod podModulePrefix', function() { return generateWithPrefix(['helper', 'foo-bar', '--pod']).then(function() { assertFile('app/helpers/foo-bar.js', { contains: "import Ember from 'ember';" + EOL + EOL + "export function fooBar(params/*, hash*/) {" + EOL + " return params;" + EOL + "}" + EOL + EOL + "export default Ember.Helper.helper(fooBar);" }); assertFile('tests/unit/helpers/foo-bar-test.js', { contains: "import { fooBar } from '../../../helpers/foo-bar';" }); }); }); it('helper foo/bar-baz --pod', function() { return generate(['helper', 'foo/bar-baz', '--pod']).then(function() { assertFile('app/helpers/foo/bar-baz.js', { contains: "import Ember from 'ember';" + EOL + EOL + "export function fooBarBaz(params/*, hash*/) {" + EOL + " return params;" + EOL + "}" + EOL + EOL + "export default Ember.Helper.helper(fooBarBaz);" }); assertFile('tests/unit/helpers/foo/bar-baz-test.js', { contains: "import { fooBarBaz } from '../../../../helpers/foo/bar-baz';" }); }); }); it('helper foo/bar-baz --pod podModulePrefix', function() { return generateWithPrefix(['helper', 'foo/bar-baz', '--pod']).then(function() { assertFile('app/helpers/foo/bar-baz.js', { contains: "import Ember from 'ember';" + EOL + EOL + "export function fooBarBaz(params/*, hash*/) {" + EOL + " return params;" + EOL + "}" + EOL + EOL + "export default Ember.Helper.helper(fooBarBaz);" }); assertFile('tests/unit/helpers/foo/bar-baz-test.js', { contains: "import { fooBarBaz } from '../../../../helpers/foo/bar-baz';" }); }); }); it('model foo --pod', function() { return generate(['model', 'foo', '--pod']).then(function() { assertFile('app/foo/model.js', { contains: [ "import DS from 'ember-data';", "export default DS.Model.extend" ] }); assertFile('tests/unit/foo/model-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", "moduleForModel('foo'" ] }); }); }); it('model foo --pod podModulePrefix', function() { return generateWithPrefix(['model', 'foo', '--pod']).then(function() { assertFile('app/pods/foo/model.js', { contains: [ "import DS from 'ember-data';", "export default DS.Model.extend" ] }); assertFile('tests/unit/pods/foo/model-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", "moduleForModel('foo'" ] }); }); }); it('model foo --pod with attributes', function() { return generate([ 'model', 'foo', 'noType', 'firstName:string', 'created_at:date', 'is-published:boolean', 'rating:number', 'bars:has-many', 'baz:belongs-to', 'echo:hasMany', 'bravo:belongs_to', '--pod' ]).then(function() { assertFile('app/foo/model.js', { contains: [ "noType: DS.attr()", "firstName: DS.attr('string')", "createdAt: DS.attr('date')", "isPublished: DS.attr('boolean')", "rating: DS.attr('number')", "bars: DS.hasMany('bar')", "baz: DS.belongsTo('baz')", "echos: DS.hasMany('echo')", "bravo: DS.belongsTo('bravo')" ] }); assertFile('tests/unit/foo/model-test.js', { contains: "needs: ['model:bar', 'model:baz', 'model:echo', 'model:bravo']" }); }); }); it('model foo/bar --pod', function() { return generate(['model', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/model.js', { contains: [ "import DS from 'ember-data';", "export default DS.Model.extend" ] }); assertFile('tests/unit/foo/bar/model-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", "moduleForModel('foo/bar'" ] }); }); }); it('model foo/bar --pod podModulePrefix', function() { return generateWithPrefix(['model', 'foo/bar', '--pod']).then(function() { assertFile('app/pods/foo/bar/model.js', { contains: [ "import DS from 'ember-data';", "export default DS.Model.extend" ] }); assertFile('tests/unit/pods/foo/bar/model-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", "moduleForModel('foo/bar'" ] }); }); }); it('in-addon route foo --pod', function() { return generateInAddon(['route', 'foo', '--pod']).then(function() { assertFile('addon/foo/route.js', { contains: [ "import Ember from 'ember';", "export default Ember.Route.extend({" + EOL + "});" ] }); assertFile('addon/foo/template.hbs', { contains: "{{outlet}}" }); assertFile('app/foo/route.js', { contains: [ "export { default } from 'my-addon/foo/route';" ] }); assertFile('app/foo/template.js', { contains: [ "export { default } from 'my-addon/foo/template';" ] }); assertFile('tests/unit/foo/route-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('route:foo'" ] }); }); }); it('route foo --pod', function() { return generate(['route', 'foo', '--pod']).then(function() { assertFile('app/router.js', { contains: 'this.route(\'foo\')' }); assertFile('app/foo/route.js', { contains: [ "import Ember from 'ember';", "export default Ember.Route.extend({" + EOL + "});" ] }); assertFile('app/foo/template.hbs', { contains: '{{outlet}}' }); assertFile('tests/unit/foo/route-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('route:foo'" ] }); }); }); it('route foo --pod with --path', function() { return generate(['route', 'foo', '--pod', '--path=:foo_id/show']) .then(function() { assertFile('app/router.js', { contains: [ 'this.route(\'foo\', {', 'path: \':foo_id/show\'', '});' ] }); }); }); it('route foo --pod with --reset-namespace', function() { return generate(['route', 'foo', '--pod', '--reset-namespace']) .then(function() { assertFile('app/router.js', { contains: [ 'this.route(\'foo\', {', 'resetNamespace: true', '});' ] }); }); }); it('route foo --pod with --reset-namespace=false', function() { return generate(['route', 'foo', '--pod', '--reset-namespace=false']) .then(function() { assertFile('app/router.js', { contains: [ 'this.route(\'foo\', {', 'resetNamespace: false', '});' ] }); }); }); it('route foo --pod podModulePrefix', function() { return generateWithPrefix(['route', 'foo', '--pod']).then(function() { assertFile('app/router.js', { contains: 'this.route(\'foo\')' }); assertFile('app/pods/foo/route.js', { contains: [ "import Ember from 'ember';", "export default Ember.Route.extend({" + EOL + "});" ] }); assertFile('app/pods/foo/template.hbs', { contains: '{{outlet}}' }); assertFile('tests/unit/pods/foo/route-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('route:foo'" ] }); }); }); it('route index --pod', function() { return generate(['route', 'index', '--pod']).then(function() { assertFile('app/router.js', { doesNotContain: "this.route('index');" }); }); }); it('route application --pod', function() { // need to run `initApp` manually here instead of using `generate` helper // because we need to remove the templates/application.hbs file to prevent // a prompt (due to a conflict) return initApp().then(function() { remove(path.join('app', 'templates', 'application.hbs')); }) .then(function(){ return ember(['generate', 'route', 'application', '--pod']); }) .then(function() { assertFile('app/router.js', { doesNotContain: "this.route('application');" }); }); }); it('route basic --pod isn\'t added to router', function() { return generate(['route', 'basic', '--pod']).then(function() { assertFile('app/router.js', { doesNotContain: "this.route('basic');" }); assertFile('app/basic/route.js'); }); }); it('template foo --pod', function() { return generate(['template', 'foo', '--pod']).then(function() { assertFile('app/foo/template.hbs'); }); }); it('template foo --pod podModulePrefix', function() { return generateWithPrefix(['template', 'foo', '--pod']).then(function() { assertFile('app/pods/foo/template.hbs'); }); }); it('template foo/bar --pod', function() { return generate(['template', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/template.hbs'); }); }); it('template foo/bar --pod podModulePrefix', function() { return generateWithPrefix(['template', 'foo/bar', '--pod']).then(function() { assertFile('app/pods/foo/bar/template.hbs'); }); }); it('view foo --pod', function() { return generate(['view', 'foo', '--pod']).then(function() { assertFile('app/foo/view.js', { contains: [ "import Ember from 'ember';", "export default Ember.View.extend({" + EOL + "})" ] }); assertFile('tests/unit/foo/view-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('view:foo'" ] }); }); }); it('view foo --pod podModulePrefix', function() { return generateWithPrefix(['view', 'foo', '--pod']).then(function() { assertFile('app/pods/foo/view.js', { contains: [ "import Ember from 'ember';", "export default Ember.View.extend({" + EOL + "})" ] }); assertFile('tests/unit/pods/foo/view-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('view:foo'" ] }); }); }); it('view foo/bar --pod', function() { return generate(['view', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/view.js', { contains: [ "import Ember from 'ember';", "export default Ember.View.extend({" + EOL + "})" ] }); assertFile('tests/unit/foo/bar/view-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('view:foo/bar'" ] }); }); }); it('view foo/bar --pod podModulePrefix', function() { return generateWithPrefix(['view', 'foo/bar', '--pod']).then(function() { assertFile('app/pods/foo/bar/view.js', { contains: [ "import Ember from 'ember';", "export default Ember.View.extend({" + EOL + "})" ] }); assertFile('tests/unit/pods/foo/bar/view-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('view:foo/bar'" ] }); }); }); it('resource foos --pod', function() { return generate(['resource', 'foos', '--pod']).then(function() { assertFile('app/router.js', { contains: 'this.route(\'foos\');' }); assertFile('app/foo/model.js', { contains: 'export default DS.Model.extend' }); assertFile('app/foos/route.js', { contains: 'export default Ember.Route.extend({' + EOL + '});' }); assertFile('app/foos/template.hbs', { contains: '{{outlet}}' }); assertFile('tests/unit/foo/model-test.js', { contains: "moduleForModel('foo'" }); assertFile('tests/unit/foos/route-test.js', { contains: "moduleFor('route:foos'" }); }); }); it('resource foos --pod with --path', function() { return generate(['resource', 'foos', '--pod', '--path=app/foos']) .then(function() { assertFile('app/router.js', { contains: [ 'this.route(\'foos\', {', 'path: \'app/foos\'', '});' ] }); }); }); it('resource foos --pod with --reset-namespace', function() { return generate(['resource', 'foos', '--pod', '--reset-namespace']) .then(function() { assertFile('app/router.js', { contains: [ 'this.route(\'foos\', {', 'resetNamespace: true', '});' ] }); }); }); it('resource foos --pod with --reset-namespace=false', function() { return generate(['resource', 'foos', '--pod', '--reset-namespace=false']) .then(function() { assertFile('app/router.js', { contains: [ 'this.route(\'foos\', {', 'resetNamespace: false', '});' ] }); }); }); it('resource foos --pod podModulePrefix', function() { return generateWithPrefix(['resource', 'foos', '--pod']).then(function() { assertFile('app/router.js', { contains: 'this.route(\'foos\');' }); assertFile('app/pods/foo/model.js', { contains: 'export default DS.Model.extend' }); assertFile('app/pods/foos/route.js', { contains: 'export default Ember.Route.extend({' + EOL + '});' }); assertFile('app/pods/foos/template.hbs', { contains: '{{outlet}}' }); assertFile('tests/unit/pods/foo/model-test.js', { contains: "moduleForModel('foo'" }); assertFile('tests/unit/pods/foos/route-test.js', { contains: "moduleFor('route:foos'" }); }); }); it('initializer foo --pod', function() { return generate(['initializer', 'foo', '--pod']).then(function() { assertFile('app/initializers/foo.js', { contains: "export function initialize(/* application */) {" + EOL + " // application.inject('route', 'foo', 'service:foo');" + EOL + "}" + EOL + "" + EOL+ "export default {" + EOL + " name: 'foo'," + EOL + " initialize" + EOL + "};" }); }); }); it('initializer foo/bar --pod', function() { return generate(['initializer', 'foo/bar', '--pod']).then(function() { assertFile('app/initializers/foo/bar.js', { contains: "export function initialize(/* application */) {" + EOL + " // application.inject('route', 'foo', 'service:foo');" + EOL + "}" + EOL + "" + EOL+ "export default {" + EOL + " name: 'foo/bar'," + EOL + " initialize" + EOL + "};" }); }); }); it('mixin foo --pod', function() { return generate(['mixin', 'foo', '--pod']).then(function() { assertFile('app/mixins/foo.js', { contains: [ "import Ember from 'ember';", 'export default Ember.Mixin.create({' + EOL + '});' ] }); assertFile('tests/unit/mixins/foo-test.js', { contains: [ "import FooMixin from '../../../mixins/foo';" ] }); }); }); it('mixin foo/bar --pod', function() { return generate(['mixin', 'foo/bar', '--pod']).then(function() { assertFile('app/mixins/foo/bar.js', { contains: [ "import Ember from 'ember';", 'export default Ember.Mixin.create({' + EOL + '});' ] }); assertFile('tests/unit/mixins/foo/bar-test.js', { contains: [ "import FooBarMixin from '../../../mixins/foo/bar';" ] }); }); }); it('mixin foo/bar/baz --pod', function() { return generate(['mixin', 'foo/bar/baz', '--pod']).then(function() { assertFile('tests/unit/mixins/foo/bar/baz-test.js', { contains: [ "import FooBarBazMixin from '../../../mixins/foo/bar/baz';" ] }); }); }); it('adapter application --pod', function() { return generate(['adapter', 'application', '--pod']).then(function() { assertFile('app/application/adapter.js', { contains: [ "import DS from \'ember-data\';", "export default DS.RESTAdapter.extend({" + EOL + "});" ] }); assertFile('tests/unit/application/adapter-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('adapter:application'" ] }); }); }); it('adapter foo --pod', function() { return generate(['adapter', 'foo', '--pod']).then(function() { assertFile('app/foo/adapter.js', { contains: [ "import ApplicationAdapter from \'./application\';", "export default ApplicationAdapter.extend({" + EOL + "});" ] }); assertFile('tests/unit/foo/adapter-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('adapter:foo'" ] }); }); }); it('adapter foo --pod podModulePrefix', function() { return generateWithPrefix(['adapter', 'foo', '--pod']).then(function() { assertFile('app/pods/foo/adapter.js', { contains: [ "import ApplicationAdapter from \'./application\';", "export default ApplicationAdapter.extend({" + EOL + "});" ] }); assertFile('tests/unit/pods/foo/adapter-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('adapter:foo'" ] }); }); }); it('adapter foo/bar --pod', function() { return generate(['adapter', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/adapter.js', { contains: [ "import ApplicationAdapter from \'../application\';", "export default ApplicationAdapter.extend({" + EOL + "});" ] }); }); }); it('adapter foo/bar --pod podModulePrefix', function() { return generateWithPrefix(['adapter', 'foo/bar', '--pod']).then(function() { assertFile('app/pods/foo/bar/adapter.js', { contains: [ "import ApplicationAdapter from \'../application\';", "export default ApplicationAdapter.extend({" + EOL + "});" ] }); }); }); it('adapter application cannot extend from --base-class=application', function() { return generate(['adapter', 'application', '--base-class=application', '--pod']).then(function() { expect(false); }, function(err) { expect(err.message).to.match(/Adapters cannot extend from themself/); }); }); it('adapter foo cannot extend from --base-class=foo', function() { return generate(['adapter', 'foo', '--base-class=foo', '--pod']).then(function() { expect(false); }, function(err) { expect(err.message).to.match(/Adapters cannot extend from themself/); }); }); it('adapter --pod extends from --base-class=bar', function() { return generate(['adapter', 'foo', '--base-class=bar', '--pod']).then(function() { assertFile('app/foo/adapter.js', { contains: [ "import BarAdapter from './bar';", "export default BarAdapter.extend({" + EOL + "});" ] }); }); }); it('adapter --pod extends from --base-class=foo/bar', function() { return generate(['adapter', 'foo/baz', '--base-class=foo/bar', '--pod']).then(function() { assertFile('app/foo/baz/adapter.js', { contains: [ "import FooBarAdapter from '../foo/bar';", "export default FooBarAdapter.extend({" + EOL + "});" ] }); }); }); it('adapter --pod extends from application adapter if present', function() { return preGenerate(['adapter', 'application']).then(function() { return generate(['adapter', 'foo', '--pod']).then(function() { assertFile('app/foo/adapter.js', { contains: [ "import ApplicationAdapter from './application';", "export default ApplicationAdapter.extend({" + EOL + "});" ] }); }); }); }); it('adapter --pod favors --base-class over application', function() { return preGenerate(['adapter', 'application']).then(function() { return generate(['adapter', 'foo', '--base-class=bar', '--pod']).then(function() { assertFile('app/foo/adapter.js', { contains: [ "import BarAdapter from './bar';", "export default BarAdapter.extend({" + EOL + "});" ] }); }); }); }); it('serializer foo --pod', function() { return generate(['serializer', 'foo', '--pod']).then(function() { assertFile('app/foo/serializer.js', { contains: [ "import DS from 'ember-data';", 'export default DS.RESTSerializer.extend({' + EOL + '});' ] }); assertFile('tests/unit/foo/serializer-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", ] }); }); }); it('serializer foo --pod podModulePrefix', function() { return generateWithPrefix(['serializer', 'foo', '--pod']).then(function() { assertFile('app/pods/foo/serializer.js', { contains: [ "import DS from 'ember-data';", 'export default DS.RESTSerializer.extend({' + EOL + '});' ] }); assertFile('tests/unit/pods/foo/serializer-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", ] }); }); }); it('serializer foo/bar --pod', function() { return generate(['serializer', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/serializer.js', { contains: [ "import DS from 'ember-data';", 'export default DS.RESTSerializer.extend({' + EOL + '});' ] }); assertFile('tests/unit/foo/bar/serializer-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", "moduleForModel('foo/bar'" ] }); }); }); it('serializer foo/bar --pod podModulePrefix', function() { return generateWithPrefix(['serializer', 'foo/bar', '--pod']).then(function() { assertFile('app/pods/foo/bar/serializer.js', { contains: [ "import DS from 'ember-data';", 'export default DS.RESTSerializer.extend({' + EOL + '});' ] }); assertFile('tests/unit/pods/foo/bar/serializer-test.js', { contains: [ "import { moduleForModel, test } from 'ember-qunit';", "moduleForModel('foo/bar'" ] }); }); }); it('transform foo --pod', function() { return generate(['transform', 'foo', '--pod']).then(function() { assertFile('app/foo/transform.js', { contains: [ "import DS from 'ember-data';", 'export default DS.Transform.extend({' + EOL + ' deserialize(serialized) {' + EOL + ' return serialized;' + EOL + ' },' + EOL + EOL + ' serialize(deserialized) {' + EOL + ' return deserialized;' + EOL + ' }' + EOL + '});' ] }); assertFile('tests/unit/foo/transform-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('transform:foo'" ] }); }); }); it('transform foo --pod podModulePrefix', function() { return generateWithPrefix(['transform', 'foo', '--pod']).then(function() { assertFile('app/pods/foo/transform.js', { contains: [ "import DS from 'ember-data';", 'export default DS.Transform.extend({' + EOL + ' deserialize(serialized) {' + EOL + ' return serialized;' + EOL + ' },' + EOL + EOL + ' serialize(deserialized) {' + EOL + ' return deserialized;' + EOL + ' }' + EOL + '});' ] }); assertFile('tests/unit/pods/foo/transform-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('transform:foo'" ] }); }); }); it('transform foo/bar --pod', function() { return generate(['transform', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/transform.js', { contains: [ "import DS from 'ember-data';", 'export default DS.Transform.extend({' + EOL + ' deserialize(serialized) {' + EOL + ' return serialized;' + EOL + ' },' + EOL + '' + EOL + ' serialize(deserialized) {' + EOL + ' return deserialized;' + EOL + ' }' + EOL + '});' ] }); assertFile('tests/unit/foo/bar/transform-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('transform:foo/bar'" ] }); }); }); it('transform foo/bar --pod podModulePrefix', function() { return generateWithPrefix(['transform', 'foo/bar', '--pod']).then(function() { assertFile('app/pods/foo/bar/transform.js', { contains: [ "import DS from 'ember-data';", 'export default DS.Transform.extend({' + EOL + ' deserialize(serialized) {' + EOL + ' return serialized;' + EOL + ' },' + EOL + '' + EOL + ' serialize(deserialized) {' + EOL + ' return deserialized;' + EOL + ' }' + EOL + '});' ] }); assertFile('tests/unit/pods/foo/bar/transform-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('transform:foo/bar'" ] }); }); }); it('util foo-bar --pod', function() { return generate(['util', 'foo-bar', '--pod']).then(function() { assertFile('app/utils/foo-bar.js', { contains: 'export default function fooBar() {' + EOL + ' return true;' + EOL + '}' }); assertFile('tests/unit/utils/foo-bar-test.js', { contains: [ "import fooBar from '../../../utils/foo-bar';" ] }); }); }); it('util foo-bar/baz --pod', function() { return generate(['util', 'foo/bar-baz', '--pod']).then(function() { assertFile('app/utils/foo/bar-baz.js', { contains: 'export default function fooBarBaz() {' + EOL + ' return true;' + EOL + '}' }); assertFile('tests/unit/utils/foo/bar-baz-test.js', { contains: [ "import fooBarBaz from '../../../utils/foo/bar-baz';" ] }); }); }); it('service foo --pod', function() { return generate(['service', 'foo', '--pod']).then(function() { assertFile('app/foo/service.js', { contains: [ "import Ember from 'ember';", 'export default Ember.Service.extend({' + EOL + '});' ] }); assertFile('tests/unit/foo/service-test.js', { contains: [ "import { moduleFor, test } from 'ember-qunit';", "moduleFor('service:foo'" ] }); }); }); it('service foo/bar --pod', function() { return generate(['service', 'foo/bar', '--pod']).then(function() { assertFile('app/foo/bar/service.js', { contains: [ "import Ember from 'ember';", 'export default Ember.Service.extend({' + EOL + '});' ] }); assertFile('tests/unit/foo/bar/service-test.js', { contains: [ "import { moduleFor, test }