Skip to content

Commit 2493639

Browse files
committed
Skip value collection if msg property cannot be created
1 parent c5fa1a6 commit 2493639

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

nodes/persistent-value.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,12 @@ module.exports = function(RED) {
153153
if (node.collectValues) {
154154
let collectedValues = RED.util.getMessageProperty(msg, node.collectValuesMsgProperty);
155155
if ((collectedValues === undefined) || (typeof collectedValues !== 'object')) {
156-
RED.util.setMessageProperty(msg, node.collectValuesMsgProperty, {}, true);
157-
collectedValues = RED.util.getMessageProperty(msg, node.collectValuesMsgProperty);
156+
if (RED.util.setMessageProperty(msg, node.collectValuesMsgProperty, {}, true)) {
157+
collectedValues = RED.util.getMessageProperty(msg, node.collectValuesMsgProperty);
158+
} else {
159+
node.warn(`Failed to create Object at msg.${node.collectValuesMsgProperty}. Creation only possible for object types!`);
160+
return;
161+
}
158162
}
159163

160164
const contextKey = getContextKey(node);

test/persistent_value_spec.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,6 +1084,33 @@ describe('persistent value node', function() {
10841084
});
10851085
});
10861086

1087+
it('should skip value collection if msg property cannot be created', function(done) {
1088+
const flow = structuredClone(FlowNodeAllVariants);
1089+
flow[0].valueId = ConfigValueIdNumber;
1090+
flow[0].msgProperty = 'output';
1091+
const CollectedValuesProperty = 'payload.collected_values';
1092+
flow[0].collectValues = true;
1093+
flow[0].collectValuesMsgProperty = CollectedValuesProperty;
1094+
1095+
helper.load([configNode, valueNode], flow, function() {
1096+
const c = helper.getNode(NodeIdConfig);
1097+
const v = helper.getNode(NodeIdPersistentValue);
1098+
const h = helper.getNode(NodeIdHelperCurrentValue);
1099+
1100+
h.on(InputFunction, function(msg) {
1101+
try {
1102+
msg.should.have.property('output', c.values[1].default);
1103+
msg.payload.should.not.have.property('collected_values');
1104+
done();
1105+
} catch (err) {
1106+
done(err);
1107+
}
1108+
});
1109+
v.receive({payload: AnyInputString});
1110+
v.warn.should.be.calledWithMatch(`Failed to create Object at msg.${CollectedValuesProperty}`);
1111+
});
1112+
});
1113+
10871114
// ==== Blocker Further Flow Processing Tests ===============================
10881115

10891116
it('should block further processing if equal rule matches to boolean value', function(done) {

0 commit comments

Comments
 (0)