diff --git a/.gitignore b/.gitignore index c2658d7..c7ed7ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules/ +test/temp/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..b3ece21 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,15 @@ +language: node_js +node_js: + - "0.8" + - "0.10" +addons: + hosts: + - local.generatortest.com +install: + - npm install -g bower +before_script: + - npm install + - ./test/support/generate + - sudo mkdir /vagrant + - sudo ln -s "${PWD}/test/temp/web" /vagrant/web + - sudo ./test/temp/bin/provision diff --git a/README.md b/README.md index e4a3fb6..f30859f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ -Genesis WordPress -================= +# Genesis WordPress + +[![Build Status](https://travis-ci.org/genesis/wordpress.png)](https://travis-ci.org/genesis/wordpress) + > Rapidly create, develop, & deploy WordPress across multiple environments. > ![Genesis WordPress Demo](demo.gif) diff --git a/generator/app/index.js b/generator/app/index.js index 5124b1b..396be1f 100644 --- a/generator/app/index.js +++ b/generator/app/index.js @@ -29,6 +29,8 @@ var WordpressGenerator = function(args, options, config) { }.bind(this) }); }); + + this.sourceRoot(path.join(__dirname, 'templates')); }; util.inherits(WordpressGenerator, yeoman.generators.Base); @@ -306,7 +308,7 @@ WordpressGenerator.prototype.writeWeb = function() { this.htaccessFile = ''; } - this.template('web/htaccess', path.join(this.props.web, '.htaccess')); + this.template('web/htaccess', path.join(this.props.web, '.htaccess')); this.template('web/no_robots.txt', path.join(this.props.web, 'no_robots.txt')); this.template('web/robots.txt', path.join(this.props.web, 'robots.txt')); }; diff --git a/package.json b/package.json index d84839b..f86bf52 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,13 @@ "ssh-keygen": "~0.2.1", "yeoman-generator": "~0.14.0-rc.1" }, - "devDependencies": {}, + "devDependencies": { + "hooker": "~0.2.3", + "mocha": "~1.15.1", + "zombie": "~2.0.0-alpha24" + }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "mocha --reporter spec" }, "repository": { "type": "git", diff --git a/provisioning/roles/common/vars/main.yml b/provisioning/roles/common/vars/main.yml index 92d03ee..500bde0 100644 --- a/provisioning/roles/common/vars/main.yml +++ b/provisioning/roles/common/vars/main.yml @@ -2,6 +2,7 @@ system_packages: - build-essential - autoconf + - tasksel - re2c - curl - git-core diff --git a/test/generator.js b/test/generator.js new file mode 100644 index 0000000..33fcb71 --- /dev/null +++ b/test/generator.js @@ -0,0 +1,31 @@ +'use strict'; + +var assert = require('assert'); +var Browser = require('zombie'); +var fs = require('fs'); +var path = require('path'); + +describe('Genesis WordPress', function () { + describe('generator', function() { + it('should create required files', function(done) { + [ + 'bin/provision', + 'deployment/deploy.rb', + 'provisioning/provision.yml', + 'provisioning/files/ssh/id_rsa', + 'provisioning/files/ssh/id_rsa.pub', + 'web/wp-config.php', + 'bower.json', + 'Capfile', + 'README.md', + 'Vagrantfile', + ].forEach(function(file) { + var filePath = path.join(__dirname, 'temp', file); + + assert.ok(fs.existsSync(filePath), 'File not created: ' + filePath); + }); + + done(); + }); + }); +}); diff --git a/test/site.install.js b/test/site.install.js new file mode 100644 index 0000000..f839a13 --- /dev/null +++ b/test/site.install.js @@ -0,0 +1,47 @@ +'use strict'; + +var assert = require('assert'); +var Browser = require('zombie'); +var fs = require('fs'); +var path = require('path'); + +describe('Genesis WordPress', function () { + describe('site', function() { + it('may not be installed', function(done) { + var browser = new Browser(); + + this.timeout(0); + + browser + .visit('http://local.generatortest.com/wp-admin/install.php') + .then(function() { + if (browser.button('Install WordPress')) { + browser + .fill('Site Title', 'Genesis WordPress Test') + .fill('Username', 'test') + .fill('admin_password', 'test') + .fill('admin_password2', 'test') + .fill('Your E-mail', 'test@example.com') + .uncheck('blog_public') + ; + + return browser.pressButton('Install WordPress'); + } + }) + .then(done, done) + ; + }); + + it('should be installed', function(done) { + var browser = new Browser(); + + browser + .visit('http://local.generatortest.com/wp-admin/install.php') + .then(function() { + assert.equal('Log In', browser.text('a.button')); + }) + .then(done, done) + ; + }) + }); +}); diff --git a/test/support/generate b/test/support/generate new file mode 100755 index 0000000..8b56146 --- /dev/null +++ b/test/support/generate @@ -0,0 +1,6 @@ +#!/usr/bin/env node + +var Generator = require('./generator'); +var generator = new Generator(); + +generator.run(); diff --git a/test/support/generator.js b/test/support/generator.js new file mode 100644 index 0000000..bccc13e --- /dev/null +++ b/test/support/generator.js @@ -0,0 +1,60 @@ +#!/usr/bin/env node + +var hooker = require('hooker'); +var path = require('path'); +var helpers = require('yeoman-generator').test; + +var Generator = function() {}; + +Generator.prototype.create = function() { + this.app = helpers.createGenerator('genesis-wordpress:app', [ + [require('../../generator/app'), 'genesis-wordpress:app'] + ]); +}; + +Generator.prototype.prompts = function() { + hooker.hook(this.app, 'prompt', function(prompts, done) { + var answers = { + name: 'GeneratorTest.com', + domain: 'generatortest.com', + ip: '192.168.137.137', + DB_NAME: 'generator_test', + DB_USER: 'generator_test', + DB_PASSWORD: 'generator_test' + }; + + prompts.forEach(function(prompt) { + if (answers[prompt.name]) { + return; + } + + if (prompt.default instanceof Function) { + answers[prompt.name] = prompt.default(answers); + } else { + answers[prompt.name] = prompt.default; + } + }); + + hooker.unhook(this.app, 'prompt'); + + done(answers); + + return hooker.preempt(answers); + }.bind(this)); +}; + +Generator.prototype.run = function() { + helpers.testDirectory(path.join(__dirname, '..', 'temp'), function(err) { + if (err) { + throw err; + } + + this.create(); + this.prompts(); + + this.app.run({}, function() {}); + }.bind(this)); +}; + + +module.exports = Generator;