diff --git a/packages/generator-electrode/README.md b/packages/generator-electrode/README.md index 78158b802..22f5f87d1 100644 --- a/packages/generator-electrode/README.md +++ b/packages/generator-electrode/README.md @@ -1,14 +1,14 @@ # generator-electrode [![NPM version][npm-image]][npm-url] [![Dependency Status][daviddm-image]][daviddm-url] [![devDependency Status][daviddm-dev-image]][daviddm-dev-url] [![npm downloads][npm-downloads-image]][npm-downloads-url] -> Generate Electrode ~~Isomorphic~~ Universal React App with NodeJS backend or a React component with useful gulp tasks for development, building and publishing. +> Generate Electrode ~~Isomorphic~~ Universal React App with NodeJS backend or a React component with useful clap tasks for development, building and publishing. ## Installation -First, install [Yeoman], [gulp], and generator-electrode using [npm] (we assume you have pre-installed [node.js] (> 4.2.x required)). +First, install [Yeoman], [xclap-cli], and generator-electrode using [npm] (we assume you have pre-installed [node.js] (> 4.2.x required)). ```bash -$ npm install -g yo gulp generator-electrode +$ npm install -g yo xclap-cli generator-electrode ``` > Note: You may need add `sudo` to the command. @@ -34,15 +34,15 @@ $ npm start Wait for webpack to be ready and navigate to `http://localhost:3000` with your browser. -You can run [gulp] to see the list of tasks available. +You can run [clap] to see the list of tasks available. Some common ones: - - `gulp dev` - start in webpack-dev-server development mode - - `gulp hot` - start in webpack-dev-server hot mode - - `gulp build` - build production `dist` files - - `gulp server-prod` - start server in production mode - - `gulp check` - run unit tests with coverage + - `clap dev` - start in webpack-dev-server development mode + - `clap hot` - start in webpack-dev-server hot mode + - `clap build` - build production `dist` files + - `clap server-prod` - start server in production mode + - `clap check` - run unit tests with coverage ## Generating a React Component Install the generator if you haven't already: @@ -73,7 +73,7 @@ component. The component project structure uses a [Lerna](https://lernajs.io/) structure, which can help manage multiple repos within your `packages` directory. Your initial project structure will be : -```bash +```text test-component/ ├── README.md ├── demo-app @@ -84,7 +84,7 @@ test-component/ │   │   ├── development.json │   │   ├── production.js │   │   └── production.json -│   ├── gulpfile.js +│   ├── clap.js │   ├── package.json │   ├── src │   │   ├── client @@ -114,7 +114,7 @@ test-component/ └── packages └── test-component ├── README.md - ├── gulpfile.js + ├── clap.js ├── package.json ├── src │   ├── components @@ -157,7 +157,7 @@ Preview your component by using the `demo-app`. This is an electrode app which u ```bash $ cd demo-app -$ gulp demo +$ clap demo ``` A webserver will be started on [localhost:3000](http://127.0.0.1:3000). @@ -188,7 +188,7 @@ Apache-2.0 © WalmartLabs [daviddm-dev-url]:https://david-dm.org/electrode-io/electrode?path=packages/generator-electrode?type-dev [npm-downloads-image]:https://img.shields.io/npm/dm/generator-electrode.svg [npm-downloads-url]:https://www.npmjs.com/package/generator-electrode -[gulp]: http://gulpjs.com/ +[xclap-cli]: https://www.npmjs.com/package/xclap-cli [Yeoman]: http://yeoman.io [npm]: https://www.npmjs.com/ [node.js]: https://nodejs.org/ diff --git a/packages/generator-electrode/clap.js b/packages/generator-electrode/clap.js new file mode 100644 index 000000000..ea371779c --- /dev/null +++ b/packages/generator-electrode/clap.js @@ -0,0 +1 @@ +require("electrode-archetype-njs-module-dev")(); diff --git a/packages/generator-electrode/component-add/index.js b/packages/generator-electrode/component-add/index.js index 2c8128f34..84954641f 100644 --- a/packages/generator-electrode/component-add/index.js +++ b/packages/generator-electrode/component-add/index.js @@ -194,7 +194,7 @@ module.exports = generators.Base.extend({ "\n" + "\nYour component is in " + this.packageName + " and your demo app is in ../" + this.demoAppName + "\n" + - "\nType 'cd ../" + this.demoAppName + "' then 'gulp dev' to run the development build for the demo app." + + "\nType 'cd ../" + this.demoAppName + "' then 'clap dev' to run the development build for the demo app." + "\n" ); } diff --git a/packages/generator-electrode/component/index.js b/packages/generator-electrode/component/index.js index ed2054fd0..33c809293 100644 --- a/packages/generator-electrode/component/index.js +++ b/packages/generator-electrode/component/index.js @@ -9,13 +9,13 @@ var parseAuthor = require("parse-author"); var optionOrPrompt = require("yeoman-option-or-prompt"); var ReactComponentGenerator = yeoman.Base.extend({ - constructor: function () { + constructor: function() { yeoman.Base.apply(this, arguments); this.quotes = this.options.quotes; this.githubUrl = this.options.githubUrl || "https://github.com"; this.optionOrPrompt = optionOrPrompt; }, - initializing: function () { + initializing: function() { this.isAddon = this.options.isAddon || false; this.demoAppName = this.options.demoAppName; this.pkg = this.fs.readJSON(this.destinationPath("package.json"), {}); @@ -36,21 +36,21 @@ var ReactComponentGenerator = yeoman.Base.extend({ this.props.quoteType = this.quotes; }, prompting: { - greeting: function () { + greeting: function() { if (!this.isAddon) { this.log( "\n" + - chalk.bold.underline("Welcome to the Electrode Component Generator") + - "\n" + - "\nWe're going to set up a new " + - chalk.bold("Electrode") + - " component, ready for development with" + - "\n" + - chalk.bold("gulp, webpack, demo, electrode component archetype, and live-reload") + chalk.bold.underline("Welcome to the Electrode Component Generator") + + "\n" + + "\nWe're going to set up a new " + + chalk.bold("Electrode") + + " component, ready for development with" + + "\n" + + chalk.bold("react, webpack, demo, electrode component archetype, and live-reload") ); } }, - askFor: function () { + askFor: function() { if (this.pkg.name || this.options.name) { this.props.name = this.pkg.name || _.kebabCase(this.options.name); } @@ -130,7 +130,7 @@ var ReactComponentGenerator = yeoman.Base.extend({ this.createDirectory = this.props.createDirectory; this.componentName = _.kebabCase(_.deburr(this.props.projectName)) .replace(/^\s+|\s+$/g, "") - .replace(/(^|[-_ ])+(.)/g, function (match, first, second) { + .replace(/(^|[-_ ])+(.)/g, function(match, first, second) { return second.toUpperCase(); }); this.currentYear = new Date().getFullYear(); @@ -144,7 +144,7 @@ var ReactComponentGenerator = yeoman.Base.extend({ }, writing: { - lernaStructure: function () { + lernaStructure: function() { // copy lerna and top level templates if (!this.isAddon) { this.copy("gitignore", ".gitignore"); @@ -153,7 +153,7 @@ var ReactComponentGenerator = yeoman.Base.extend({ this.template("lerna.json", "lerna.json"); } }, - project: function () { + project: function() { this.copy("packages/component/babelrc", this.rootPath + ".babelrc"); this.copy("packages/component/gitignore", this.rootPath + ".gitignore"); this.copy("packages/component/npmignore", this.rootPath + ".npmignore"); @@ -161,11 +161,11 @@ var ReactComponentGenerator = yeoman.Base.extend({ if (this.quoteType === "'") { this.template("packages/component/eslintrc", this.rootPath + ".eslintrc"); } - this.template("packages/component/_gulpfile.js", this.rootPath + "gulpfile.js"); + this.template("packages/component/_clap.js", this.rootPath + "clap.js"); this.template("packages/component/_package.json", this.rootPath + "package.json"); this.template("packages/component/_readme.md", this.rootPath + "README.md"); }, - component: function () { + component: function() { this.template( "packages/component/src/components/_component.jsx", this.rootPath + "src/components/" + this.projectName + ".jsx" @@ -188,7 +188,7 @@ var ReactComponentGenerator = yeoman.Base.extend({ this.template("packages/component/src/_Component.js", this.rootPath + "src/index.js"); }, - test: function () { + test: function() { this.template( "packages/component/test/client/eslintrc", this.rootPath + "test/client/.eslintrc" @@ -203,7 +203,7 @@ var ReactComponentGenerator = yeoman.Base.extend({ ); }, - demoApp: function () { + demoApp: function() { //Do not generate the demo app if called from the add on generator this.originalDemoAppName = "demo-app"; if (!this.isAddon) { @@ -245,12 +245,12 @@ var ReactComponentGenerator = yeoman.Base.extend({ } }, - install: function () { + install: function() { //git init and npmi for lerna lernaStructure if (!this.isAddon) { //reset the path to the actual root this.destinationRoot(this.oldRoot); - this.destinationRoot() + this.destinationRoot(); this.spawnCommandSync("git", ["init"], { cwd: this.destinationPath() @@ -281,8 +281,7 @@ var ReactComponentGenerator = yeoman.Base.extend({ }); }, - end: function () { - + end: function() { if (this.quoteType === "'") { this.spawnCommandSync("node_modules/.bin/eslint", [ "--fix", @@ -305,7 +304,7 @@ var ReactComponentGenerator = yeoman.Base.extend({ " and your demo app is " + this.packageName + "/" + this.appName + "\n" + "\nType 'cd " + this.packageName + "/" + this.appName + - "' then 'gulp dev' to run the development build for the demo app." + + "' then 'clap dev' to run the development build for the demo app." + "\n" ); } diff --git a/packages/generator-electrode/component/templates/_package.json b/packages/generator-electrode/component/templates/_package.json index a81ee8086..d2f3ce68c 100644 --- a/packages/generator-electrode/component/templates/_package.json +++ b/packages/generator-electrode/component/templates/_package.json @@ -15,12 +15,13 @@ }, "homepage": "<%= githubUrl %>/<%= packageGitHubOrg %>/<%= ghRepo %>", "scripts": { - "test": "lerna bootstrap && lerna run test" + "bootstrap": "lerna bootstrap", + "test": "lerna run test" }, "dependency": {}, "devDependencies": { - "gulp": "^3.9.1", - "lerna": "^2.0.0-rc.1", - "lodash": "^4.10.1" + "lerna": "^2.0.0-rc.5", + "lodash": "^4.10.1", + "xclap": "^0.2.0" } } diff --git a/packages/generator-electrode/component/templates/lerna.json b/packages/generator-electrode/component/templates/lerna.json index 88e3762d5..ebadb2f80 100644 --- a/packages/generator-electrode/component/templates/lerna.json +++ b/packages/generator-electrode/component/templates/lerna.json @@ -1,5 +1,5 @@ { - "lerna": "2.0.0-rc.1", + "lerna": "2.0.0-rc.5", "packages": [ "packages/*" ], diff --git a/packages/generator-electrode/component/templates/packages/component/_clap.js b/packages/generator-electrode/component/templates/packages/component/_clap.js new file mode 100644 index 000000000..e999b3419 --- /dev/null +++ b/packages/generator-electrode/component/templates/packages/component/_clap.js @@ -0,0 +1,27 @@ +"use strict"; + +/** + * There is a full range of clap tasks defined in the above archetype + * but below is a concise list of most often used clap tasks at the + * component level + * + * Full list of clap tasks: + * https://github.com/electrode-io/electrode-archetype-react-component/blob/master/archetype-clap.js#L38-L134 + * + */ + +const tasks = { + <% if (quoteType === "'") { %> + 'archetype:lint-server': `eslint --color -c ./.eslintrc config/karma config/webpack`, + "lint-react-src": `eslint --ext .js,.jsx -c ./.eslintrc src --color`, + "lint-scripts": `eslint --ext .js -c ./.eslintrc scripts --color`, + "lint-react-test": `eslint --ext .js,.jsx -c ./test/client/.eslintrc test/client --color`, + <% } %> + "prepublish": ["npm:prepublish"] +}; + +const xclap = require("xclap"); + +xclap.load("ext", tasks); + +require("electrode-archetype-react-component")(xclap); diff --git a/packages/generator-electrode/component/templates/packages/component/_gulpfile.js b/packages/generator-electrode/component/templates/packages/component/_gulpfile.js deleted file mode 100644 index 300b22626..000000000 --- a/packages/generator-electrode/component/templates/packages/component/_gulpfile.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -<% if (quoteType === "'") { %> -const exec = require("electrode-gulp-helper").exec; -<% } %> - -/** - * There is a full range of gulp tasks defined in the above archetype - * but below is a concise list of most often used gulp tasks at the - * component level - * - * Full list of gulp tasks: - * https://github.com/electrode-io/electrode-archetype-react-component/blob/master/archetype-gulpfile.js#L38-L134 - * - */ - -const tasks = { - <% if (quoteType === "'") { %> - 'archetype:lint-server': () => exec(`eslint --color -c ./.eslintrc config/karma config/webpack`), - "lint-react-src": () => exec(`eslint --ext .js,.jsx -c ./.eslintrc src --color`), - "lint-scripts": () => exec(`eslint --ext .js -c ./.eslintrc scripts --color`), - "lint-react-test": () => exec(`eslint --ext .js,.jsx -c ./test/client/.eslintrc test/client --color`), - <% } %> - "prepublish": ["npm:prepublish"] -}; - -require("electrode-archetype-react-component")(tasks); diff --git a/packages/generator-electrode/component/templates/packages/component/_package.json b/packages/generator-electrode/component/templates/packages/component/_package.json index fd71f7790..8edf6aa28 100644 --- a/packages/generator-electrode/component/templates/packages/component/_package.json +++ b/packages/generator-electrode/component/templates/packages/component/_package.json @@ -18,17 +18,16 @@ "dependencies": {}, "devDependencies": { "electrode-archetype-react-component": "^2.0.0", - "electrode-archetype-react-component-dev": "^2.0.0", - "gulp": "^3.9.1" + "electrode-archetype-react-component-dev": "^2.0.0" }, "engines": { - "node": "^4.2.6", - "npm": "^3.5.3" + "node": ">= 4", + "npm": ">= 3" }, "scripts": { - "prepublish": "gulp prepublish", - "start": "gulp demo", - "test": "gulp check" + "prepublish": "clap prepublish", + "start": "clap demo", + "test": "clap check" }, "keywords": [ "react", diff --git a/packages/generator-electrode/component/templates/packages/component/_readme.md b/packages/generator-electrode/component/templates/packages/component/_readme.md index 1ac6a7f1e..7f5c80a7e 100644 --- a/packages/generator-electrode/component/templates/packages/component/_readme.md +++ b/packages/generator-electrode/component/templates/packages/component/_readme.md @@ -9,16 +9,16 @@ Live demo: [<%= ghUser %>.github.io/<%= packageName %>](http://<%= ghUser %>.git To build the package locally, run: -``` -npm install +```bash +$ npm install ``` To run the package demo locally, run the `demo-app` : -``` -npm install -gulp dev +```bash +$ npm install +$ clap dev ``` @@ -31,8 +31,8 @@ The easiest way to use <%= packageName %> is to install it from NPM and include You can also use the standalone build by including `dist/<%= packageName %>.js` in your page. If you use this, make sure you have already included React, and it is available as a global variable. -``` -npm install <%= packageName %> --save +```bash +$ npm install <%= packageName %> --save ``` @@ -40,7 +40,7 @@ npm install <%= packageName %> --save __EXPLAIN USAGE HERE__ -``` +```js var <%= componentName %> = require('<%= packageName %>'); <<%= componentName %>>Example> diff --git a/packages/generator-electrode/generators/app/index.js b/packages/generator-electrode/generators/app/index.js index 57a424b4e..c17e8faf1 100644 --- a/packages/generator-electrode/generators/app/index.js +++ b/packages/generator-electrode/generators/app/index.js @@ -326,7 +326,7 @@ module.exports = generators.Base.extend({ // Let's extend package.json so we're not overwriting user previous fields this.fs.writeJSON(this.destinationPath('package.json'), pkg); - const rootConfigsToCopy = ['gulpfile.js', 'config', 'test']; + const rootConfigsToCopy = ['clap.js', 'config', 'test']; if (isSingleQuote) rootConfigsToCopy.push('.eslintrc'); rootConfigsToCopy.forEach((f) => { this.fs.copyTpl( @@ -505,7 +505,7 @@ module.exports = generators.Base.extend({ this.log( "\n" + chalk.green.underline("Your new Electrode application is ready!") + "\n" + - "\nType " + chdir + "'gulp dev' to start the server." + + "\nType " + chdir + "'clap dev' to start the server." + "\n" ); } diff --git a/packages/generator-electrode/generators/app/templates/_package.json b/packages/generator-electrode/generators/app/templates/_package.json index 0f1c22160..94c7b7453 100644 --- a/packages/generator-electrode/generators/app/templates/_package.json +++ b/packages/generator-electrode/generators/app/templates/_package.json @@ -15,16 +15,16 @@ "repository": {}, "license": "ISC", "engines": { - "node": "^4.x.x || ^6.x.x || ^7.x.x", - "npm": ">= 3.x.x" + "node": ">= 4", + "npm": ">= 3" }, "scripts": { - "prestart": "gulp build", - "start": "if test \"$NODE_ENV\" = \"production\"; then npm run prod; else gulp dev; fi", - "test": "gulp check", - "coverage": "gulp check", + "prestart": "clap build", + "start": "if test \"$NODE_ENV\" = \"production\"; then npm run prod; else clap dev; fi", + "test": "clap check", + "coverage": "clap check", "prod": "echo 'Starting standalone server in PROD mode'; NODE_ENV=production node ./lib/server/", - "heroku-postbuild": "gulp build" + "heroku-postbuild": "clap build" }, "dependencies": { "bluebird": "^3.4.6", @@ -46,6 +46,6 @@ }, "devDependencies": { "electrode-archetype-react-app-dev": "^2.0.0", - "gulp": "^3.9.1" + "xclap": "^0.2.0" } } diff --git a/packages/generator-electrode/generators/app/templates/gulpfile.js b/packages/generator-electrode/generators/app/templates/clap.js similarity index 100% rename from packages/generator-electrode/generators/app/templates/gulpfile.js rename to packages/generator-electrode/generators/app/templates/clap.js diff --git a/packages/generator-electrode/gulpfile.js b/packages/generator-electrode/gulpfile.js deleted file mode 100644 index 62aebd565..000000000 --- a/packages/generator-electrode/gulpfile.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; -var path = require('path'); -var gulp = require('gulp'); -var eslint = require('gulp-eslint'); -var mocha = require('gulp-mocha'); -var istanbul = require('gulp-istanbul'); -var nsp = require('gulp-nsp'); -var plumber = require('gulp-plumber'); -var gulpIgnore = require('gulp-ignore'); - -function excludeTemplates() { - return gulpIgnore.exclude(['**/templates/**', '**/node_modules/**']); -} - -gulp.task('static', function () { - return gulp.src(['*.js', 'test/**/*.js', 'generators/**/*.js']) - .pipe(excludeTemplates()) - .pipe(eslint()) - .pipe(eslint.format()) - .pipe(eslint.failAfterError()); -}); - -gulp.task('nsp', function (cb) { - nsp({package: path.resolve('package.json')}, cb); -}); - -gulp.task('pre-test', function () { - return gulp.src('generators/**/*.js') - .pipe(excludeTemplates()) - .pipe(istanbul({ - includeUntested: true - })) - .pipe(istanbul.hookRequire()); -}); - -gulp.task('test', ['pre-test'], function (cb) { - var mochaErr; - - gulp.src('test/**/*.js') - .pipe(plumber()) - .pipe(mocha({reporter: 'spec'})) - .on('error', function (err) { - mochaErr = err; - }) - .pipe(istanbul.writeReports()) - .on('end', function () { - cb(mochaErr); - }); -}); - -gulp.task('watch', function () { - gulp.watch(['generators/**/*.js', 'test/**'], ['test']); -}); - -gulp.task('prepublish', ['nsp']); -gulp.task('default', ['static', 'test']); diff --git a/packages/generator-electrode/package.json b/packages/generator-electrode/package.json index 991470208..7395f84fb 100644 --- a/packages/generator-electrode/package.json +++ b/packages/generator-electrode/package.json @@ -1,6 +1,6 @@ { "name": "generator-electrode", - "version": "2.2.0", + "version": "2.2.1", "description": "Generate Electrode React App", "homepage": "http://www.electrode.io", "repository": { @@ -40,18 +40,11 @@ "yosay": "^1.0.0" }, "devDependencies": { - "eslint": "^3.1.1", - "gulp": "^3.9.0", - "gulp-eslint": "^2.0.0", - "gulp-ignore": "^2.0.1", - "gulp-istanbul": "^1.0.0", - "gulp-line-ending-corrector": "^1.0.1", - "gulp-mocha": "^2.0.0", - "gulp-nsp": "^2.1.0", - "gulp-plumber": "^1.0.0", - "mocha": "^3.0.2", + "electrode-archetype-njs-module-dev": "^2.1.0", "mockery": "^1.7.0", "pinkie-promise": "^2.0.1", + "xclap": "^0.2.0", + "xclap-cli": "^0.1.1", "yeoman-assert": "^2.2.1", "yeoman-test": "^1.4.0" }, @@ -61,8 +54,7 @@ } }, "scripts": { - "prepublish": "gulp prepublish", - "test": "gulp" + "test": "clap check" }, "license": "Apache-2.0", "engines": { diff --git a/packages/generator-electrode/test/app.js b/packages/generator-electrode/test/app.js deleted file mode 100644 index 214ad5307..000000000 --- a/packages/generator-electrode/test/app.js +++ /dev/null @@ -1,94 +0,0 @@ -'use strict'; -var mockery = require('mockery'); -var path = require('path'); -var assert = require('yeoman-assert'); -var helpers = require('yeoman-test'); -var Promise = require('pinkie-promise'); - -describe('electrode:app', function () { - this.timeout(10000); - before(function () { - mockery.enable({ - warnOnReplace: false, - warnOnUnregistered: false - }); - - mockery.registerMock('npm-name', function () { - return Promise.resolve(true); - }); - - mockery.registerMock('github-username', function (name, cb) { - cb(null, 'unicornUser'); - }); - - mockery.registerMock( - require.resolve('generator-license/app'), - helpers.createDummyGenerator() - ); - }); - - after(function () { - mockery.disable(); - }); - - describe('running on new project', function () { - before(function () { - this.answers = { - name: 'generator-electrode', - description: 'Electrode app generator', - homepage: 'http://electrode.io', - githubAccount: 'electrode-io', - authorName: 'Electrode', - authorEmail: 'hi@electrode.io', - authorUrl: 'http://electrode.io', - keywords: ['foo', 'bar'] - }; - return helpers.run(path.join(__dirname, '../generators/app')) - .withPrompts(this.answers) - .toPromise(); - }); - - it('creates files', function () { - assert.file([ - '.travis.yml', - '.editorconfig', - '.gitignore', - '.gitattributes', - 'README.md' - ]); - }); - - it('creates package.json', function () { - assert.file('package.json'); - assert.jsonFileContent('package.json', { - name: 'generator-electrode', - version: '0.0.1', - description: this.answers.description, - homepage: this.answers.homepage, - repository: {url: 'electrode-io/generator-electrode'}, - author: { - name: this.answers.authorName, - email: this.answers.authorEmail, - url: this.answers.authorUrl - }, - files: [], - keywords: this.answers.keywords, - main: 'server/index.js' - }); - }); - - it('creates and fill contents in README.md', function () { - assert.file('README.md'); - assert.fileContent('README.md', 'var generatorElectrode = require(\'generator-electrode\');'); - assert.fileContent('README.md', '> Electrode app generator'); - assert.fileContent('README.md', '$ npm install --save generator-electrode'); - assert.fileContent('README.md', '© [Electrode](http://electrode.io)'); - assert.fileContent('README.md', '[travis-image]: https://travis-ci.org/electrode-io/generator-electrode.svg?branch=master'); - }); - - it('creates and fills the pageTitle field in config/default.js', function () { - assert.file('./config/default.js'); - assert.fileContent('./config/default.js', '"pageTitle": "generator-electrode"'); - }); - }); -}); diff --git a/packages/generator-electrode/test/spec/app.spec.js b/packages/generator-electrode/test/spec/app.spec.js new file mode 100644 index 000000000..73f1a5b54 --- /dev/null +++ b/packages/generator-electrode/test/spec/app.spec.js @@ -0,0 +1,86 @@ +"use strict"; +const mockery = require("mockery"); +const path = require("path"); +const assert = require("yeoman-assert"); +const helpers = require("yeoman-test"); +const Promise = require("pinkie-promise"); + +describe("electrode:app", function() { + this.timeout(10000); + before(function() { + mockery.enable({ + warnOnReplace: false, + warnOnUnregistered: false + }); + + mockery.registerMock("npm-name", function() { + return Promise.resolve(true); + }); + + mockery.registerMock("github-username", function(name, cb) { + cb(null, "unicornUser"); + }); + + mockery.registerMock(require.resolve("generator-license/app"), helpers.createDummyGenerator()); + }); + + after(function() { + mockery.disable(); + }); + + describe("running on new project", function() { + before(function() { + this.answers = { + name: "generator-electrode", + description: "Electrode app generator", + homepage: "http://electrode.io", + githubAccount: "electrode-io", + authorName: "Electrode", + authorEmail: "hi@electrode.io", + authorUrl: "http://electrode.io", + keywords: ["foo", "bar"] + }; + return helpers.run(path.resolve("generators/app")).withPrompts(this.answers).toPromise(); + }); + + it("creates files", function() { + assert.file([".travis.yml", ".editorconfig", ".gitignore", ".gitattributes", "README.md"]); + }); + + it("creates package.json", function() { + assert.file("package.json"); + assert.jsonFileContent("package.json", { + name: "generator-electrode", + version: "0.0.1", + description: this.answers.description, + homepage: this.answers.homepage, + repository: { url: "electrode-io/generator-electrode" }, + author: { + name: this.answers.authorName, + email: this.answers.authorEmail, + url: this.answers.authorUrl + }, + files: [], + keywords: this.answers.keywords, + main: "server/index.js" + }); + }); + + it("creates and fill contents in README.md", function() { + assert.file("README.md"); + assert.fileContent("README.md", "var generatorElectrode = require('generator-electrode');"); + assert.fileContent("README.md", "> Electrode app generator"); + assert.fileContent("README.md", "$ npm install --save generator-electrode"); + assert.fileContent("README.md", "© [Electrode](http://electrode.io)"); + assert.fileContent( + "README.md", + "[travis-image]: https://travis-ci.org/electrode-io/generator-electrode.svg?branch=master" + ); + }); + + it("creates and fills the pageTitle field in config/default.js", function() { + assert.file("./config/default.js"); + assert.fileContent("./config/default.js", `"pageTitle": "generator-electrode"`); + }); + }); +});