trinte-creator
Version:
TrinteJS script creator
141 lines (125 loc) • 4.86 kB
JavaScript
var ejs = require('ejs');
var fs = require('fs');
var path = require('path');
var wrench = require('wrench');
var inflection = require('../lib/inflection');
/**
* Script to create a default test scripts, requires the model to exist
* @param params
* @param appPath
* @param options
*/
exports.execute = function(params, appPath, options) {
var fileCheck;
var scrPath = appPath + '/app';
var modPath = scrPath + '/models';
if(!options.model) {
console.log("You must specifiy a model name to generate the tests against!");
return;
}
/**
* Create the model based on a singular (e.g. people becomes person, users becomes user)
*/
var modelName = options.model.singularize();
if (modelName !== options.model) {
console.log("Using model name as singular not plural: " + modelName);
}
// Capitalise
modelName = modelName.capitalize();
var modelFile = scrPath + "/models/" + modelName + '.js';
var controllerName = modelName.pluralize();
var testFolder = appPath + "/test/";
var unitTemplate = __dirname + '/../scripts/test/unit.ejs';
var integrationTemplate = __dirname + '/../scripts/test/controller.ejs';
var functionalTemplate = __dirname + '/../scripts/test/model.ejs';
if(!fs.existsSync(testFolder)) {
wrench.mkdirSyncRecursive(testFolder,755);
}
if(!fs.existsSync(testFolder + "/units")) {
wrench.mkdirSyncRecursive(testFolder + "/units",755);
}
if(!fs.existsSync(testFolder + "/models")) {
wrench.mkdirSyncRecursive(testFolder + "/models",755);
}
if(!fs.existsSync(testFolder + "/controllers")) {
wrench.mkdirSyncRecursive(testFolder + "/controllers",755);
}
/*
if(!fs.existsSync(testFolder + "/integration")) {
wrench.mkdirSyncRecursive(testFolder + "/integration",755);
}
if(!fs.existsSync(testFolder + "/functional")) {
wrench.mkdirSyncRecursive(testFolder + "/functional",755);
}
*/
// Check if the model exists
fileCheck = fs.existsSync(modelFile);
if(!fileCheck) {
console.log("The model you have specified doesn't exist!");
console.log("You need to create the model first.");
console.log("e.g. script create-model " + modelName);
return;
}
// Check if the unit test exists
fileCheck = fs.existsSync(testFolder + "/units/" + modelName + '.js');
if(fileCheck) {
if(params[0] !== "force") {
console.log("Tests appear to already exist for this model!");
console.log("Add an additional paramater of 'force' to over write the tests.");
console.log("e.g. script create-test " + modelName + " force");
return;
}
}
fileCheck = fs.existsSync(testFolder + '/tests.js');
if(!fileCheck) {
fs.createReadStream(__dirname + '/../app/snippets/tests.js')
.pipe(fs.createWriteStream(testFolder + '/tests.js'));
}
// Read the template
var tmpUnit = fs.readFileSync(unitTemplate, 'utf8');
var tmpIntegration = fs.readFileSync(integrationTemplate, 'utf8');
var tmpFunctional = fs.readFileSync(functionalTemplate, 'utf8');
// Render the views
var retUnit = ejs.render(tmpUnit, {
modelName:modelName,
controllerName:controllerName,
namespace: options.namespace,
open: "<?",
close: "?>"
}, {delimiter: '?'});
var retIntegration = ejs.render(tmpIntegration, {
modelName:modelName,
controllerName:controllerName,
namespace: options.namespace,
open: "<?",
close: "?>"
}, {delimiter: '?'});
var retFunctional = ejs.render(tmpFunctional, {
modelName:modelName,
controllerName:controllerName,
namespace: options.namespace,
open: "<?",
close: "?>"
}, {delimiter: '?'});
/*
var retIntegration = ejs.render(tmpIntegration, {
modelName:modelName,
controllerName:controllerName,
namespace: options.namespace,
open: "<?",
close: "?>"
}, {delimiter: '?'});
var retFunctional = ejs.render(tmpFunctional, {
modelName:modelName,
controllerName:controllerName,
namespace: options.namespace,
open: "<?",
close: "?>"
}, {delimiter: '?'});
*/
// Write the file
fs.writeFileSync(testFolder + "/units/" + modelName + '.js', retUnit,'utf8');
fs.writeFileSync(testFolder + "/controllers/" + controllerName + 'Controller.js', retIntegration,'utf8');
fs.writeFileSync(testFolder + "/models/" + modelName + '.js', retFunctional,'utf8');
console.log('Tests for ' + modelName + ' created in tests.');
};