From 52f74ff7e0db83c0d50bcfc38badb6fab9d89655 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 26 Jul 2018 14:13:12 +0100 Subject: [PATCH] Join: reduce fails if count not in first msg received --- nodes/core/logic/17-split.js | 5 ++--- test/nodes/core/logic/17-split_spec.js | 28 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/nodes/core/logic/17-split.js b/nodes/core/logic/17-split.js index 8563f07dd..522e986bd 100644 --- a/nodes/core/logic/17-split.js +++ b/nodes/core/logic/17-split.js @@ -335,9 +335,8 @@ module.exports = function(RED) { } var group = pending[gid]; var msgs = group.msgs; - if(parts.hasOwnProperty('count') && - (group.count === undefined)) { - group.count = count; + if(parts.hasOwnProperty('count') && (group.count === undefined)) { + group.count = parts.count; } msgs.push(msg); pending_count++; diff --git a/test/nodes/core/logic/17-split_spec.js b/test/nodes/core/logic/17-split_spec.js index 9448e874c..564fd720d 100644 --- a/test/nodes/core/logic/17-split_spec.js +++ b/test/nodes/core/logic/17-split_spec.js @@ -956,6 +956,34 @@ describe('JOIN node', function() { }); }); + it('should reduce messages - count only in last part', function(done) { + var flow = [{id:"n1", type:"join", mode:"reduce", + reduceRight:false, + reduceExp:"$A+payload", + reduceInit:"0", + reduceInitType:"num", + reduceFixup:undefined, + wires:[["n2"]]}, + {id:"n2", type:"helper"}]; + helper.load(joinNode, flow, function() { + var n1 = helper.getNode("n1"); + var n2 = helper.getNode("n2"); + var count = 0; + n2.on("input", function(msg) { + try { + msg.should.have.property("payload"); + msg.payload.should.equal(10); + done(); + } + catch(e) { done(e); } + }); + n1.receive({payload:3, parts:{index:2, id:222}}); + n1.receive({payload:2, parts:{index:1, id:222}}); + n1.receive({payload:4, parts:{index:3, count:4,id:222}}); + n1.receive({payload:1, parts:{index:0, id:222}}); + }); + }); + function checkInitTypes(itype, ival, rval, initializer, checker, done) { var flow = [{id:"n1", z:"f0", type:"join", mode:"reduce", reduceRight:false,