Update unit tests

pull/5346/head
GogoVega 2025-11-09 14:39:54 +01:00
parent 1d006de7c6
commit 93a00c1cc2
No known key found for this signature in database
GPG Key ID: E1E048B63AC5AC2B
5 changed files with 96 additions and 96 deletions

View File

@ -77,17 +77,17 @@ module.exports = function(RED) {
this.repeat = this.repeat * 1000;
this.debug(RED._("inject.repeat", this));
this.interval_id = setInterval(function() {
node.emit("input", {});
node.receive();
}, this.repeat);
} else if (this.crontab) {
this.debug(RED._("inject.crontab", this));
this.cronjob = scheduleTask(this.crontab,() => { node.emit("input", {})});
this.cronjob = scheduleTask(this.crontab,() => { node.receive()});
}
};
if (this.once) {
this.onceTimeout = setTimeout( function() {
node.emit("input",{});
node.receive();
node.repeaterSetup();
}, this.onceDelay);
} else {

View File

@ -710,7 +710,7 @@ class Flow {
}
}
}
} else {
} else if (typeof this.parent.getNode === "function") {
// Node not found inside this flow - ask the parent
return this.parent.getNode(id);
}

View File

@ -221,7 +221,7 @@ describe('link Node', function() {
const flow = [
{ id: "tab-flow-1", type: "tab", label: "Flow 1" },
{ id: "link-in-1", z: "tab-flow-1", type: "link in", name: "double payload", wires: [["func"]] },
{ id: "func", z: "tab-flow-1", type: "helper", wires: [["link-out-1"]] },
{ id: "func", z: "tab-flow-1", type: "helper", wires: [["link-out-1"]], x: 1, y: 1 },
{ id: "link-out-1", z: "tab-flow-1", type: "link out", mode: "" }, //not return mode, cause link-call timeout
{ id: "link-call", z: "tab-flow-1", type: "link call", linkType: "static", "timeout": "0.5", links: ["link-in-1"], wires: [["n4"]] },
{ id: "catch-all", z: "tab-flow-1", type: "catch", scope: ["link-call"], uncaught: true, wires: [["n4"]] },

View File

@ -204,8 +204,8 @@ describe('Flow', function() {
it("instantiates an initial configuration and stops it", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",z:"t1",type:"test",foo:"a"}
]);
@ -256,8 +256,8 @@ describe('Flow', function() {
it("instantiates config nodes in the right order",async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",z:"t1",type:"test",foo:"5"}, // This node depends on #5
{id:"5",z:"t1",type:"test"}
@ -308,8 +308,8 @@ describe('Flow', function() {
it("rewires nodes specified by diff", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]}
]);
@ -318,7 +318,7 @@ describe('Flow', function() {
await flow.start();
//TODO: use update to pass in new wiring and verify the change
createCount.should.equal(3);
flow.start({rewired:["2"]});
flow.start({rewired:[["2"]]});
createCount.should.equal(3);
rewiredNodes.should.have.a.property("2");
});
@ -355,8 +355,8 @@ describe('Flow', function() {
it("ignores disabled nodes", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",d:true,type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",d:true,type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",z:"t1",type:"test",foo:"a"},
{id:"5",z:"t1",type:"test",d:true,foo:"a"}
@ -406,8 +406,8 @@ describe('Flow', function() {
it("stops all nodes", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"asyncTest",foo:"a",wires:[]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
@ -428,8 +428,8 @@ describe('Flow', function() {
it("stops specified nodes", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
@ -450,9 +450,9 @@ describe('Flow', function() {
it("stops config nodes last", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"c1",z:"t1",type:"test"},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"c2",z:"t1",type:"test"},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"c3",z:"t1",type:"test"}
@ -485,8 +485,8 @@ describe('Flow', function() {
}});
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"testAsync",closeDelay: 80, foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"testAsync",closeDelay: 80, foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
@ -514,8 +514,8 @@ describe('Flow', function() {
it("gets a node known to the flow", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",z:"t1",type:"test",foo:"a"}
]);
@ -529,8 +529,8 @@ describe('Flow', function() {
it("passes to parent if node not known locally", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",z:"t1",type:"test",foo:"a"}
]);
@ -547,8 +547,8 @@ describe('Flow', function() {
it("does not pass to parent if cancelBubble set", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",z:"t1",type:"test",foo:"a"}
]);
@ -567,8 +567,8 @@ describe('Flow', function() {
it("passes a status event to the adjacent status node", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sn",x:10,y:10,z:"t1",type:"status",foo:"a",wires:[]},
{id:"sn2",x:10,y:10,z:"t1",type:"status",foo:"a",wires:[]}
@ -605,10 +605,10 @@ describe('Flow', function() {
it("passes a status event to the adjacent scoped status node ", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sn",x:10,y:10,z:"t1",type:"status",scope:["2"],foo:"a",wires:[]},
{id:"sn",x:10,y:10,z:"t1",type:"status",scope:[["2"]],foo:"a",wires:[]},
{id:"sn2",x:10,y:10,z:"t1",type:"status",scope:["1"],foo:"a",wires:[]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
@ -639,7 +639,7 @@ describe('Flow', function() {
{id: "g1", type: "group", g: "g3", z:"t1" },
{id: "g2", type: "group", z:"t1" },
{id: "g3", type: "group", z:"t1" },
{id:"1",x:10,y:10,z:"t1",g:"g1", type:"test",name:"a",wires:["2"]},
{id:"1",x:10,y:10,z:"t1",g:"g1", type:"test",name:"a",wires:[["2"]]},
// sn - in the same group as source node
{id:"sn",x:10,y:10,z:"t1",g:"g1", type:"status",scope:"group",wires:[]},
// sn2 - in a different group hierarchy to the source node
@ -669,8 +669,8 @@ describe('Flow', function() {
it("passes an error event to the adjacent catch node", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sn",x:10,y:10,z:"t1",type:"catch",foo:"a",wires:[]},
{id:"sn2",x:10,y:10,z:"t1",type:"catch",foo:"a",wires:[]},
@ -712,10 +712,10 @@ describe('Flow', function() {
it("passes an error event to the adjacent scoped catch node ", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sn",x:10,y:10,z:"t1",type:"catch",scope:["2"],foo:"a",wires:[]},
{id:"sn",x:10,y:10,z:"t1",type:"catch",scope:[["2"]],foo:"a",wires:[]},
{id:"sn2",x:10,y:10,z:"t1",type:"catch",scope:["1"],foo:"a",wires:[]},
{id:"sn3",x:10,y:10,z:"t1",type:"catch",uncaught:true,wires:[]},
{id:"sn4",x:10,y:10,z:"t1",type:"catch",uncaught:true,wires:[]}
@ -766,7 +766,7 @@ describe('Flow', function() {
{id: "g1", type: "group", g: "g3", z:"t1" },
{id: "g2", type: "group", z:"t1" },
{id: "g3", type: "group", z:"t1" },
{id:"1",x:10,y:10,z:"t1",g:"g1", type:"test",name:"a",wires:["2"]},
{id:"1",x:10,y:10,z:"t1",g:"g1", type:"test",name:"a",wires:[["2"]]},
// sn - in the same group as source node
{id:"sn",x:10,y:10,z:"t1",g:"g1", type:"catch",scope:"group",wires:[]},
// sn2 - in a different group hierarchy to the source node
@ -795,8 +795,8 @@ describe('Flow', function() {
it("moves any existing error object sideways", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sn",x:10,y:10,z:"t1",type:"catch",foo:"a",wires:[]}
]);
@ -828,8 +828,8 @@ describe('Flow', function() {
it("passes a complete event to the adjacent Complete node",async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"testDone",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"testDone",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"testDone",foo:"a",wires:[]},
{id:"cn",x:10,y:10,z:"t1",type:"complete",scope:["1","3"],foo:"a",wires:[]}
]);
@ -856,8 +856,8 @@ describe('Flow', function() {
it("sends a message - no cloning", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]}
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
await flow.start();
@ -875,7 +875,7 @@ describe('Flow', function() {
if (err) { reject(err) }
else { resolve() }
}
n2.receive = function(msg) {
n2._receive = function(msg) {
messageReceived = true;
try {
msg.should.be.exactly(message);
@ -898,8 +898,8 @@ describe('Flow', function() {
it("sends a message - cloning", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]}
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
await flow.start();
@ -916,7 +916,7 @@ describe('Flow', function() {
if (err) { reject(err) }
else { resolve() }
}
n2.receive = function(msg) {
n2._receive = function(msg) {
try {
// Message should be cloned
msg.should.be.eql(message);
@ -939,8 +939,8 @@ describe('Flow', function() {
it("sends multiple messages", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]}
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
await flow.start();
@ -957,7 +957,7 @@ describe('Flow', function() {
else { resolve() }
}
var messageCount = 0;
n2.receive = function(msg) {
n2._receive = function(msg) {
try {
msg.should.be.exactly(messages[messageCount++]);
if (messageCount === 2) {
@ -1032,8 +1032,8 @@ describe('Flow', function() {
})
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]}
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]}
]);
var flow = Flow.create({},config,config.flows["t1"]);
await flow.start();
@ -1049,7 +1049,7 @@ describe('Flow', function() {
if (err) { reject(err) }
else { resolve() }
}
n2.receive = function(msg) {
n2._receive = function(msg) {
messageReceived = true;
try {
msg.should.be.eql(message);
@ -1103,14 +1103,14 @@ describe('Flow', function() {
})
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]}
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]}
]);
flow = Flow.create({},config,config.flows["t1"]);
await flow.start();
n1 = flow.getNode('1');
n2 = flow.getNode('2');
n2.receive = function(msg) {
n2._receive = function(msg) {
messageReceived = true;
}
n1.error = function(err) {
@ -1180,14 +1180,14 @@ describe('Flow', function() {
})
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["3"]}
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["3"]]}
]);
flow = Flow.create({},config,config.flows["t1"]);
await flow.start();
n1 = flow.getNode('1');
n2 = flow.getNode('2');
n2.receive = function(msg) {
n2._receive = function(msg) {
messageReceived = true;
}
n1.error = function(err) {

View File

@ -295,8 +295,8 @@ describe('Subflow', function() {
it("instantiates a subflow and stops it", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3","4"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"],["4"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 2","info":"",
@ -359,8 +359,8 @@ describe('Subflow', function() {
it("instantiates a subflow inside a subflow and stops it", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3","4"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"],["4"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 1","info":"",
@ -389,8 +389,8 @@ describe('Subflow', function() {
it("rewires a subflow node on update/start", async function(){
var rawConfig = [
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"4",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 2","info":"",
@ -443,8 +443,8 @@ describe('Subflow', function() {
it("stops subflow instance nodes", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 2","info":"",
"in":[{"wires":[{"id":"sf1-1"}]}],"out":[{"wires":[{"id":"sf1-1","port":0}]}]},
@ -466,8 +466,8 @@ describe('Subflow', function() {
it("passes a status event to the subflow's parent tab status node - all scope", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 2","info":"",
"in":[{"wires":[{"id":"sf1-1"}]}],"out":[{"wires":[{"id":"sf1-1","port":0}]}]},
@ -496,8 +496,8 @@ describe('Subflow', function() {
it("passes a status event to the subflow's parent tab status node - targetted scope", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 2","info":"",
"in":[{"wires":[{"id":"sf1-1"}]}],"out":[{"wires":[{"id":"sf1-1","port":0}]}]},
@ -534,8 +534,8 @@ describe('Subflow', function() {
it("emits a status event when a message is passed to a subflow-status node - msg.payload as string", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{
id:"sf1",
@ -571,8 +571,8 @@ describe('Subflow', function() {
it("emits a status event when a message is passed to a subflow-status node - msg.payload as status obj", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{
id:"sf1",
@ -610,8 +610,8 @@ describe('Subflow', function() {
it("emits a status event when a message is passed to a subflow-status node - msg.status", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{
id:"sf1",
@ -649,8 +649,8 @@ describe('Subflow', function() {
it("does not emit a regular status event if it contains a subflow-status node", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{
id:"sf1",
@ -682,8 +682,8 @@ describe('Subflow', function() {
it("passes an error event to the subflow's parent tab catch node - all scope",async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 2","info":"",
"in":[{"wires":[{"id":"sf1-1"}]}],"out":[{"wires":[{"id":"sf1-1","port":0}]}]},
@ -714,8 +714,8 @@ describe('Subflow', function() {
it("passes an error event to the subflow's parent tab catch node - targetted scope", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",name:"a",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"a",wires:[]},
{id:"sf1",type:"subflow","name":"Subflow 2","info":"",
"in":[{"wires":[{"id":"sf1-1"}]}],"out":[{"wires":[{"id":"sf1-1","port":0}]}]},
@ -752,8 +752,8 @@ describe('Subflow', function() {
it("can access process env var", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"t1.3",wires:[]},
{id:"sf1",type:"subflow",name:"Subflow 2",info:"",
"in":[ {wires:[{id:"sf1-1"}]} ],
@ -779,8 +779,8 @@ describe('Subflow', function() {
it("can access subflow env var", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"t1.3",wires:[]},
{id:"sf1",type:"subflow",name:"Subflow 2",info:"",env: [{name: '__KEY__', value: '__VAL1__', type: 'str'}],
"in":[ {wires:[{id:"sf1-1"}]} ],
@ -815,8 +815,8 @@ describe('Subflow', function() {
it("can access nested subflow env var", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab", env: [{name: '__KEY1__', value: 't1', type: 'str'}]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"t1.3",wires:[]},
{id:"sf1",type:"subflow",name:"Subflow 1",info:"",
env: [{name: '__KEY2__', value: 'sf1', type: 'str'}],
@ -854,8 +854,8 @@ describe('Subflow', function() {
it("can access name of subflow as env var", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",name:"SFN",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",name:"SFN",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"t1.3",wires:[]},
{id:"sf1",type:"subflow",name:"Subflow 2",info:"",
"in":[ {wires:[{id:"sf1-1"}]} ],
@ -879,8 +879,8 @@ describe('Subflow', function() {
it("can access id of subflow as env var", async function() {
var config = flowUtils.parseConfig([
{id:"t1",type:"tab"},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:["2"]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",name:"SFN",wires:["3"]},
{id:"1",x:10,y:10,z:"t1",type:"test",foo:"t1.1",wires:[["2"]]},
{id:"2",x:10,y:10,z:"t1",type:"subflow:sf1",name:"SFN",wires:[["3"]]},
{id:"3",x:10,y:10,z:"t1",type:"test",foo:"t1.3",wires:[]},
{id:"sf1",type:"subflow",name:"Subflow 2",info:"",
"in":[ {wires:[{id:"sf1-1"}]} ],