mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Merge pull request #515 from anna2130/nr-cli-enhancements
No-op and return success on enabling/disabling node by type name
This commit is contained in:
		| @@ -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<info.types.length;i++) { | ||||
|             util.log("[red] - "+info.types[i]); | ||||
|         if (enabled) { | ||||
|             info = redNodes.enableNode(node.id); | ||||
|         } else { | ||||
|             info = redNodes.disableNode(node.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<info.types.length;i++) { | ||||
|                 util.log("[red] - "+info.types[i]); | ||||
|             } | ||||
|         } else if (enabled && info.err) { | ||||
|             util.log("[red] Failed to enable node:"); | ||||
|             util.log("[red] - "+info.name+" : "+info.err); | ||||
|         } | ||||
|     } else if (enabled && info.err) { | ||||
|         util.log("[red] Failed to enable node:"); | ||||
|         util.log("[red] - "+info.name+" : "+info.err); | ||||
|     } | ||||
|  | ||||
|     return info; | ||||
|   | ||||
| @@ -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"}; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user