UNPKG

trinte-creator

Version:
141 lines (125 loc) 4.86 kB
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.'); };