From 66213d151da19da403d103f2d835727b071a394d Mon Sep 17 00:00:00 2001 From: Anna Thomas Date: Wed, 17 Dec 2014 13:35:57 +0000 Subject: [PATCH 1/2] No-op and return success on enabling/disabling node by type name --- red/api/nodes.js | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/red/api/nodes.js b/red/api/nodes.js index fe9b19ac1..07b94edb0 100644 --- a/red/api/nodes.js +++ b/red/api/nodes.js @@ -142,10 +142,8 @@ module.exports = { var info; if (!node) { res.send(404); - } else if (!node.err && node.enabled === body.enabled) { - res.json(node); } else { - res.json(putNode(id, body.enabled)); + res.json(putNode(node, body.enabled)); } } catch(err) { res.send(400,err.toString()); @@ -169,7 +167,7 @@ module.exports = { var matching = getMatchingNodes(mod); if (matching.length === 1) { // One match, assume correct - res.json(putNode(matching[0].id, body.enabled)); + res.json(putNode(matching[0], body.enabled)); return; } else if (matching.length > 1) { // Multiple matches, need clarification @@ -229,24 +227,28 @@ function getMatchingNodes(node) { return matching; } -function putNode(id, enabled) { +function putNode(node, enabled) { var info; - if (enabled) { - info = redNodes.enableNode(id); + if (!node.err && node.enabled === enabled) { + info = node; } else { - info = redNodes.disableNode(id); - } - - if (info.enabled === enabled && !info.err) { - comms.publish("node/"+(enabled?"enabled":"disabled"),info,false); - util.log("[red] "+(enabled?"Enabled":"Disabled")+" node types:"); - for (var i=0;i Date: Wed, 17 Dec 2014 13:58:49 +0000 Subject: [PATCH 2/2] Updated nodes_spec test to no-op when already enabled/disabled by type name --- test/red/api/nodes_spec.js | 58 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/test/red/api/nodes_spec.js b/test/red/api/nodes_spec.js index 4bb76f887..4ea983c75 100644 --- a/test/red/api/nodes_spec.js +++ b/test/red/api/nodes_spec.js @@ -126,6 +126,7 @@ describe("nodes api", function() { .expect(200) .end(function(err,res) { getNodeInfo.restore(); + getModuleVersion.restore(); if (err) { throw err; } @@ -812,6 +813,63 @@ describe("nodes api", function() { }); }); + describe('no-ops if a node specified by type name already in the right state', function() { + function run(state,done) { + var node = {id:"123",enabled:state,types:['a']}; + var settingsAvailable = sinon.stub(settings,'available', function() { + return true; + }); + var getModuleInfo = sinon.stub(redNodes,'getModuleInfo',function(id) { + return null; + }); + var enableNode = sinon.stub(redNodes,'enableNode',function(id) { + node.enabled = true; + return node; + }); + var disableNode = sinon.stub(redNodes,'disableNode',function(id) { + node.enabled = false; + return node; + }); + var getNodeList = sinon.stub(redNodes,'getNodeList', function() { + return [{name: 'foo', enabled: state}, {name: 'bar'}]; + }); + var getModuleVersion = sinon.stub(redNodes,'getModuleVersion', function() { + return '0.0.1'; + }); + + request(app) + .put('/nodes/foo') + .send({enabled:state}) + .expect(200) + .end(function(err,res) { + settingsAvailable.restore(); + getModuleInfo.restore(); + var enableNodeCalled = enableNode.called; + var disableNodeCalled = disableNode.called; + enableNode.restore(); + disableNode.restore(); + getNodeList.restore(); + getModuleVersion.restore(); + if (err) { + throw err; + } + enableNodeCalled.should.be.false; + disableNodeCalled.should.be.false; + res.body.should.have.property("name","foo"); + res.body.should.have.property("version"); + res.body.should.have.property("enabled",state); + + done(); + }); + } + it('already enabled', function(done) { + run(true,done); + }); + it('already disabled', function(done) { + run(false,done); + }); + }); + describe('does not no-op if err on a node in module', function() { function run(state,done) { var node = {id:"123",enabled:state,types:['a'],err:"foo"};