diff --git a/red/nodes/credentials.js b/red/nodes/credentials.js index 0b1ad2e35..22e78d81e 100644 --- a/red/nodes/credentials.js +++ b/red/nodes/credentials.js @@ -195,5 +195,14 @@ module.exports = { */ save: function () { return storage.saveCredentials(credentialCache); + }, + + /** + * Gets the credential definition for the given node type + * @param type the node type + * @return the credential definition + */ + getDefinition: function (type) { + return credentialsDef[type]; } } diff --git a/test/red/nodes/index_spec.js b/test/red/nodes/index_spec.js index 6c8bf67af..42756d9ed 100644 --- a/test/red/nodes/index_spec.js +++ b/test/red/nodes/index_spec.js @@ -13,55 +13,49 @@ * See the License for the specific language governing permissions and * limitations under the License. **/ -var should = require("should"); + var should = require("should"); var fs = require('fs-extra'); var path = require('path'); var when = require("when"); var defer = when.defer(); -var RedNode = require("../../../red/nodes/Node"); -var index = require("../../../red/nodes/index"); -var server = require("../../../red/server"); -var testFlows = [{"type":"test","id":"tab1","label":"Sheet 1"}]; -var storage = { - getFlows: function() { - var defer = when.defer(); - defer.resolve(testFlows); - return defer.promise; - }, - getCredentials: function() { - return when.promise(function(resolve,reject) { - resolve({"tab1":{"b":1,"c":2}}); - }); - }, - saveFlows: function(conf) { - var defer = when.defer(); - defer.resolve(); - should.deepEqual(testFlows, conf); - return defer.promise; - }, - saveCredentials: function(creds) { - return when(true); - } - }; +var index = require("../../../red/nodes/index"); describe("red/nodes/index", function() { - it('nodes are initialised with credentials',function(done) { - - function TestNode(n) { - index.createNode(this, n); - - this.id = 'tab1'; - this.type = 'test'; - this.name = 'barney'; - var node = this; + var testFlows = [{"type":"test","id":"tab1","label":"Sheet 1"}]; + var storage = { + getFlows: function() { + var defer = when.defer(); + defer.resolve(testFlows); + return defer.promise; + }, + getCredentials: function() { + return when.promise(function(resolve,reject) { + resolve({"tab1":{"b":1,"c":2}}); + }); + }, + saveFlows: function(conf) { + var defer = when.defer(); + defer.resolve(); + should.deepEqual(testFlows, conf); + return defer.promise; + }, + saveCredentials: function(creds) { + return when(true); + } + }; - this.on("log", function() { - // do nothing - }); - } + function TestNode(n) { + index.createNode(this, n); + var node = this; + this.on("log", function() { + // do nothing + }); + } + + it('nodes are initialised with credentials',function(done) { index.init({}, storage); index.registerType('test', TestNode); @@ -110,4 +104,57 @@ describe("red/nodes/index", function() { }); + describe("registerType should register credentials definition", function() { + var http = require('http'); + var express = require('express'); + var sinon = require('sinon'); + var app = express(); + var server = require("../../../red/server"); + var credentials = require("../../../red/nodes/credentials"); + var localfilesystem = require("../../../red/storage/localfilesystem"); + var RED = require("../../../red/red.js"); + + var userDir = path.join(__dirname,".testUserHome"); + before(function(done) { + fs.remove(userDir,function(err) { + fs.mkdir(userDir,function() { + sinon.stub(index, 'load', function() { + return when.promise(function(resolve,reject){ + resolve([]); + }); + }); + sinon.stub(localfilesystem, 'getCredentials', function() { + return when.promise(function(resolve,reject) { + resolve({"tab1":{"b":1,"c":2}}); + }); + }) ; + RED.init(http.createServer(function(req,res){app(req,res)}), + {userDir: userDir}); + server.start().then(function () { + done(); + }); + }); + }); + }); + + after(function(done) { + fs.remove(userDir,done); + server.stop(); + index.load.restore(); + localfilesystem.getCredentials.restore(); + }); + + it(': definition defined',function(done) { + index.registerType('test', TestNode, { + credentials: { + foo: {type:"test"} + } + }); + var testnode = new TestNode({id:'tab1',type:'test',name:'barney'}); + credentials.getDefinition("test").should.have.property('foo'); + done(); + }); + + }); + });