sails
Version:
API-driven framework for building realtime apps, using MVC conventions (based on Express and Socket.io)
145 lines (121 loc) • 4.89 kB
JavaScript
/**
* Module dependencies
*/
var assert = require('assert');
var fs = require('fs-extra');
var exec = require('child_process').exec;
var _ = require('@sailshq/lodash');
var appHelper = require('./helpers/appHelper');
var path = require('path');
var util = require('util');
/**
* Module errors
*/
describe('New app generator', function() {
var sailsbin = path.resolve('./bin/sails.js');
var appName = 'testApp';
var defaultTemplateLang = 'ejs';
this.slow(1000);
beforeEach(function(done) {
fs.exists(appName, function(exists) {
if (exists) {
fs.removeSync(appName);
}
done();
});
});
afterEach(function(done) {
fs.exists(appName, function(exists) {
if (exists) {
fs.removeSync(appName);
}
done();
});
});
describe('sails new <appname>', function() {
it('should create new, liftable app in new folder', function(done) {
exec('node '+ sailsbin + ' new ' + appName + ' --fast --traditional --without=lodash,async', function(err) {
if (err) { return done(new Error(err)); }
appHelper.lift({log:{level:'silent'}}, function(err, sailsApp) {
if (err) {return done(err);}
sailsApp.lower(done);
});
});
});
it('should not overwrite a folder', function(done) {
fs.mkdir(appName, function(err) {
if (err) { return done(new Error(err)); }
fs.writeFile(path.resolve(appName, 'test'), '', function(err) {
if (err) { return done(new Error(err)); }
exec('node '+ sailsbin + ' new ' + appName + ' --fast --traditional', function(err, dumb, result) {
// In Node v0.10.x on some environments (like in Appveyor), this just
// returns an Error in `err` instead of a result, so account for that.
if (process.versions.node.split('.')[0] === '0' && process.versions.node.split('.')[1] === '10' && err) {
return done();
}
assert(result.indexOf('error') > -1, 'Should have received an error, but instead got: ' + result);
done();
});
});
});
});
});
describe('sails generate new <appname>', function() {
it('should create new app', function(done) {
exec('node '+ sailsbin + ' generate new ' + appName + ' --fast --traditional --without=lodash,async', function(err) {
if (err) { return done(new Error(err)); }
appHelper.lift({log:{level:'silent'}}, function(err, sailsApp) {
if (err) {return done(err);}
sailsApp.lower(done);
});
});
});
it('should not overwrite a folder', function(done) {
fs.mkdir(appName, function(err) {
if (err) { return done(new Error(err)); }
fs.writeFile(path.resolve(appName, 'test'), '', function(err) {
if (err) { return done(new Error(err)); }
exec('node '+ sailsbin + ' generate new ' + appName + ' --fast --traditional', function(err, dumb, result) {
// In Node v0.10.x on some environments (like in Appveyor), this just
// returns an Error in `err` instead of a result, so account for that.
if (process.versions.node.split('.')[0] === '0' && process.versions.node.split('.')[1] === '10' && err) {
return done();
}
assert(result.indexOf('error') > -1, 'Should have received an error, but instead got: ' + result);
done();
});
});
});
});
});
describe('sails new .', function() {
it('should create new app in existing folder', function(done) {
// make app folder and move into directory
fs.mkdirSync(appName);
process.chdir(appName);
exec( 'node '+ path.resolve('..', sailsbin) + ' new . --fast --traditional --without=lodash,async', function(err) {
if (err) { return done(new Error(err)); }
// move from app to its parent directory
process.chdir('../');
done();
});
});
it('should not overwrite a folder', function(done) {
// make app folder and move into directory
fs.mkdirSync(appName);
process.chdir(appName);
fs.mkdirSync('test');
exec( 'node ' + path.resolve('..', sailsbin) + ' new . --fast --traditional --without=lodash,async', function(err, dumb, result) {
// move from app to its parent directory
process.chdir('../');
// In Node v0.10.x on some environments (like in Appveyor), this just
// returns an Error in `err` instead of a result, so account for that.
if (process.versions.node.split('.')[0] === '0' && process.versions.node.split('.')[1] === '10' && err) {
return done();
}
assert(result.indexOf('error') > -1, 'Should have received an error, but instead got: ' + result);
done();
});
});
});
});