Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 20 additions & 9 deletions lib/nodegen.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,21 @@ function createCommonFiles(templateDirectory, data) {
console.error(error);
}
}
try {
var icons = fs.readdirSync(templateDirectory + '/icons');
icons.forEach(function (icon) {
try {
var buf = fs.readFileSync(templateDirectory + '/icons/' + icon);
fs.writeFileSync(data.dst + '/' + data.module + '/icons/' + icon, buf);
} catch (error) {
console.error(error);
}
});
} catch (error) {
if (error.code !== 'ENOENT') {
console.error(error);
}
}
try {
fs.mkdirSync(data.dst + '/' + data.module + '/locales');
} catch (error) {
Expand All @@ -61,19 +76,15 @@ function createCommonFiles(templateDirectory, data) {
console.error(error);
}
}

// Create icon.png
fs.createReadStream(templateDirectory + '/icons/icon.png').pipe(fs.createWriteStream(data.dst + '/' + data.module + '/icons/icon.png'));
}

function runNpmPack(data) {
var npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';
child_process.execFile(npmCommand, ['pack', data.module], { cwd: data.dst },
function (error) {
if (error) {
console.error(error);
}
});
try {
child_process.execFileSync(npmCommand, ['pack', './' + data.module], { cwd: data.dst });
} catch (error) {
console.error(error);
}
}

function function2node(data, options) {
Expand Down
111 changes: 111 additions & 0 deletions test/lib/nodegen_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
var fs = require('fs');
var request = require('request');
var should = require('should');
var del = require('del');
var nodegen = require('../../lib/nodegen');

describe('nodegen library', function () {
describe('function node', function () {
it('should have node files', function (done) {
var options = {};
var data = { dst: '.' };
data.src = fs.readFileSync('samples/lower-case.js');
var result = nodegen.function2node(data, options);
var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json'));
packageSourceCode.name.should.equal('node-red-contrib-lowercase');
packageSourceCode.version.should.equal('0.0.1');
fs.statSync(result + '/node.html').size.should.be.above(0);
fs.statSync(result + '/node.js').size.should.be.above(0);
fs.statSync(result + '/icons/icon.png').size.should.be.above(0);
fs.statSync(result + '/README.md').size.should.be.above(0);
fs.statSync(result + '/LICENSE').size.should.be.above(0);
del.sync(result);
done();
});
it('should handle parameters (node and module name)', function (done) {
var options = {};
var data = {
name: 'nodename',
module: 'node-red-node-function-node',
dst: '.'
};
data.src = fs.readFileSync('samples/lower-case.js');
var result = nodegen.function2node(data, options);
var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json'));
packageSourceCode.name.should.equal('node-red-node-function-node');
packageSourceCode.version.should.equal('0.0.1');
del.sync(result);
done();
});
it('should handle parameters (prefix and node name)', function (done) {
var options = {};
var data = {
prefix: 'node-red-prefix-',
name: 'nodename',
dst: '.'
};
data.src = fs.readFileSync('samples/lower-case.js');
var result = nodegen.function2node(data, options);
var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json'));
packageSourceCode.name.should.equal('node-red-prefix-nodename');
packageSourceCode.version.should.equal('0.0.1');
del.sync(result);
done();
});
it('should handle parameters (version)', function (done) {
var options = {};
var data = {
version: '4.5.1',
dst: '.'
};
data.src = fs.readFileSync('samples/lower-case.js');
var result = nodegen.function2node(data, options);
var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json'));
packageSourceCode.name.should.equal('node-red-contrib-lowercase');
packageSourceCode.version.should.equal('4.5.1');
del.sync(result);
done();
});
it('should handle options', function (done) {
var options = {
tgz: true,
obfuscate: true
};
var data = { dst: '.' };
data.src = fs.readFileSync('samples/lower-case.js');
var result = nodegen.function2node(data, options);
fs.statSync(result).isFile().should.be.eql(true);
del.sync(result);
del.sync(result.replace(/-[0-9]+\.[0-9]+\.[0-9]+\.tgz$/, ''));
done();
});
});

describe('swagger node', function () {
it('should have node files', function (done) {
var options = {};
var data = { dst: '.' };
var sourcePath = 'http://petstore.swagger.io/v2/swagger.json';
request(sourcePath, function (error, response, body) {
data.src = JSON.parse(body);
var result = nodegen.swagger2node(data, options);
var packageSourceCode = JSON.parse(fs.readFileSync(result + '/package.json'));
packageSourceCode.name.should.equal('node-red-contrib-swagger-petstore');
packageSourceCode.version.should.equal('1.0.0');
packageSourceCode.license.should.equal('Apache 2.0');
fs.statSync(result + '/node.html').size.should.be.above(0);
fs.statSync(result + '/node.js').size.should.be.above(0);
fs.statSync(result + '/lib.js').size.should.be.above(0);
fs.statSync(result + '/icons/icon.png').size.should.be.above(0);
fs.statSync(result + '/locales/en-US/node.json').size.should.be.above(0);
fs.statSync(result + '/locales/ja/node.json').size.should.be.above(0);
fs.statSync(result + '/locales/zh-CN/node.json').size.should.be.above(0);
fs.statSync(result + '/README.md').size.should.be.above(0);
fs.statSync(result + '/LICENSE').size.should.be.above(0);
del.sync(result);
done();
});
});
});
});