diff --git a/test/editor/specs/scenario/cookbook_flowcontrol_uispec.js b/test/editor/specs/scenario/cookbook_flowcontrol_uispec.js
new file mode 100644
index 000000000..724d1c56f
--- /dev/null
+++ b/test/editor/specs/scenario/cookbook_flowcontrol_uispec.js
@@ -0,0 +1,81 @@
+/**
+ * Copyright JS Foundation and other contributors, http://js.foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ **/
+
+var when = require('when');
+var should = require('should');
+var fs = require('fs-extra');
+
+var helper = require('../../editor_helper');
+var debugTab = require('../../pageobjects/editor/debugTab_page');
+var workspace = require('../../pageobjects/editor/workspace_page');
+var specUtil = require('../../pageobjects/util/spec_util_page');
+
+var httpNodeRoot = '/api';
+
+// https://cookbook.nodered.org/
+describe('cookbook', function () {
+ beforeEach(function () {
+ workspace.init();
+ });
+
+ before(function () {
+ helper.startServer();
+ });
+
+ after(function () {
+ helper.stopServer();
+ });
+
+ describe('flow control', function () {
+ it('trigger a flow whenever Node-RED starts', function () {
+ var injectNode = workspace.addNode('inject');
+ var debugNode = workspace.addNode('debug');
+
+ injectNode.edit();
+ injectNode.setPayload('str', 'Started!');
+ injectNode.setOnce(true);
+ injectNode.clickOk();
+ injectNode.connect(debugNode);
+
+ debugTab.open();
+ workspace.deploy();
+ debugTab.getMessage().should.eql('"Started!"');
+ });
+
+ it('trigger a flow at regular intervals', function () {
+ var injectNode = workspace.addNode('inject');
+ var debugNode = workspace.addNode('debug');
+
+ injectNode.edit();
+ injectNode.setRepeat('interval');
+ injectNode.setRepeatInterval(1);
+ injectNode.clickOk();
+ injectNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ specUtil.pause(1000);
+ var t1 = Number(debugTab.getMessage(1));
+ t1.should.within(1500000000000, 3000000000000);
+ specUtil.pause(1000);
+ debugTab.getMessage(2).should.within(t1 + 900, 3000000000000);
+ });
+
+ // skip this case since it needs up to one minite.
+ it.skip('trigger a flow at a specific time');
+ });
+});
diff --git a/test/editor/specs/scenario/cookbook_endpoint_uispec.js b/test/editor/specs/scenario/cookbook_httpendpoints_uispec.js
similarity index 98%
rename from test/editor/specs/scenario/cookbook_endpoint_uispec.js
rename to test/editor/specs/scenario/cookbook_httpendpoints_uispec.js
index 9a2ed0710..134498370 100644
--- a/test/editor/specs/scenario/cookbook_endpoint_uispec.js
+++ b/test/editor/specs/scenario/cookbook_httpendpoints_uispec.js
@@ -23,16 +23,16 @@ var workspace = require('../../pageobjects/editor/workspace_page');
var httpNodeRoot = "/api";
// https://cookbook.nodered.org/
-describe('cookbook', function() {
- beforeEach(function() {
+describe('cookbook', function () {
+ beforeEach(function () {
workspace.init();
});
- before(function() {
+ before(function () {
helper.startServer();
});
- after(function() {
+ after(function () {
helper.stopServer();
});
@@ -359,7 +359,7 @@ describe('cookbook', function() {
debugTab.getMessage().indexOf('Text file').should.not.eql(-1);
});
- it('post raw data to a flow', function() {
+ it('post raw data to a flow', function () {
var httpInNode = workspace.addNode("httpIn");
var templateNode = workspace.addNode("template");
var httpResponseNode = workspace.addNode("httpResponse");
@@ -383,7 +383,7 @@ describe('cookbook', function() {
var httpRequestNode = workspace.addNode("httpRequest");
var debugNode = workspace.addNode("debug");
- injectNode.edit()
+ injectNode.edit();
injectNode.setPayload("str", "Nick");
injectNode.clickOk();
@@ -427,7 +427,7 @@ describe('cookbook', function() {
var httpRequestNode = workspace.addNode("httpRequest");
var debugNode = workspace.addNode("debug");
- injectNode.edit()
+ injectNode.edit();
injectNode.setPayload("str", "name=Nick");
injectNode.clickOk();
@@ -451,7 +451,7 @@ describe('cookbook', function() {
debugTab.getMessage().indexOf('Hello Nick!').should.not.eql(-1);
});
- it('post JSON data to a flow', function() {
+ it('post JSON data to a flow', function () {
var httpInNode = workspace.addNode("httpIn");
var templateNode = workspace.addNode("template");
var httpResponseNode = workspace.addNode("httpResponse");
@@ -476,7 +476,7 @@ describe('cookbook', function() {
var httpRequestNode = workspace.addNode("httpRequest");
var debugNode = workspace.addNode("debug");
- injectNode.edit()
+ injectNode.edit();
injectNode.setPayload("json", '{"name":"Nick"}');
injectNode.clickOk();
diff --git a/test/editor/specs/scenario/cookbook_httprequests_uispec.js b/test/editor/specs/scenario/cookbook_httprequests_uispec.js
new file mode 100644
index 000000000..785451429
--- /dev/null
+++ b/test/editor/specs/scenario/cookbook_httprequests_uispec.js
@@ -0,0 +1,300 @@
+/**
+ * Copyright JS Foundation and other contributors, http://js.foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ **/
+
+var when = require('when');
+var should = require('should');
+var fs = require('fs-extra');
+
+var helper = require('../../editor_helper');
+var debugTab = require('../../pageobjects/editor/debugTab_page');
+var workspace = require('../../pageobjects/editor/workspace_page');
+var specUtil = require('../../pageobjects/util/spec_util_page');
+
+var httpNodeRoot = '/api';
+
+// https://cookbook.nodered.org/
+describe('cookbook', function () {
+ beforeEach(function () {
+ workspace.init();
+ });
+
+ before(function () {
+ helper.startServer();
+ });
+
+ after(function () {
+ helper.stopServer();
+ });
+
+ describe('HTTP requests', function () {
+ it('simple get request', function () {
+ var injectNode = workspace.addNode('inject');
+ var httpRequestNode = workspace.addNode('httpRequest');
+ var htmlNode = workspace.addNode('html');
+ var debugNode = workspace.addNode('debug');
+
+ httpRequestNode.edit();
+ httpRequestNode.setMethod('GET');
+ httpRequestNode.setUrl(helper.url());
+ httpRequestNode.clickOk();
+
+ htmlNode.edit();
+ htmlNode.setSelector('title');
+ htmlNode.clickOk();
+
+ injectNode.connect(httpRequestNode);
+ httpRequestNode.connect(htmlNode);
+ htmlNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.eql('"Node-RED"');
+ });
+
+ it('set the URL of a request', function () {
+ var injectNode = workspace.addNode('inject');
+ var changeNode = workspace.addNode('change');
+ var httpRequestNode = workspace.addNode('httpRequest');
+ var debugNode = workspace.addNode('debug');
+
+ injectNode.edit();
+ injectNode.setPayload('str', helper.url());
+ injectNode.clickOk();
+
+ changeNode.edit();
+ changeNode.ruleSet('url', 'msg', 'payload', 'msg');
+ changeNode.clickOk();
+
+ injectNode.connect(changeNode);
+ changeNode.connect(httpRequestNode);
+ httpRequestNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.containEql('
Node-RED');
+ });
+
+ it('set the URL of a request using a template', function () {
+ var injectNode = workspace.addNode('inject');
+ var changeNode = workspace.addNode('change');
+ var httpRequestNode = workspace.addNode('httpRequest');
+ var debugNode = workspace.addNode('debug');
+
+ injectNode.edit();
+ injectNode.setPayload('str', 'settings');
+ injectNode.clickOk();
+
+ changeNode.edit();
+ changeNode.ruleSet('query', 'msg', 'payload', 'msg');
+ changeNode.clickOk();
+
+ httpRequestNode.edit();
+ httpRequestNode.setUrl(helper.url() + '/{{{query}}}');
+ httpRequestNode.clickOk();
+
+ injectNode.connect(changeNode);
+ changeNode.connect(httpRequestNode);
+ httpRequestNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.containEql('httpNodeRoot');
+ });
+
+ it('set the query string parameters', function () {
+ var injectNode = workspace.addNode('inject');
+ var changeNode = workspace.addNode('change');
+ var httpRequestNode = workspace.addNode('httpRequest');
+ var debugNode = workspace.addNode('debug');
+
+ injectNode.edit();
+ injectNode.setPayload('str', 'Nick');
+ injectNode.clickOk();
+
+ changeNode.edit();
+ changeNode.ruleSet('query', 'msg', 'payload', 'msg');
+ changeNode.clickOk();
+
+ httpRequestNode.edit();
+ httpRequestNode.setUrl(helper.url() + httpNodeRoot + '/set-query?q={{{query}}}');
+ httpRequestNode.clickOk();
+
+ injectNode.connect(changeNode);
+ changeNode.connect(httpRequestNode);
+ httpRequestNode.connect(debugNode);
+
+ // The code for confirmation starts from here.
+ var httpInNode = workspace.addNode('httpIn', 0, 200);
+ var templateNode = workspace.addNode('template');
+ var httpResponseNode = workspace.addNode('httpResponse');
+
+ httpInNode.edit();
+ httpInNode.setMethod('get');
+ httpInNode.setUrl('/set-query');
+ httpInNode.clickOk();
+
+ templateNode.edit();
+ templateNode.setSyntax('mustache');
+ templateNode.setFormat('handlebars');
+ templateNode.setTemplate('Hello {{req.query.q}}');
+ templateNode.clickOk();
+
+ httpInNode.connect(templateNode);
+ templateNode.connect(httpResponseNode);
+ // The code for confirmation ends here.
+
+ workspace.deploy();
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.eql('"Hello Nick"');
+ });
+
+ it('get a parsed JSON response', function () {
+ var injectNode = workspace.addNode('inject');
+ var changeNodeSetPost = workspace.addNode('change');
+ var httpRequestNode = workspace.addNode('httpRequest');
+ var debugNode = workspace.addNode('debug');
+
+ injectNode.edit();
+ injectNode.setPayload('str', 'json-response');
+ injectNode.clickOk();
+
+ changeNodeSetPost.edit();
+ changeNodeSetPost.ruleSet('post', 'msg', 'payload', 'msg');
+ changeNodeSetPost.clickOk();
+
+ httpRequestNode.edit();
+ httpRequestNode.setMethod('GET');
+ var url = helper.url() + httpNodeRoot + '/{{post}}';
+ httpRequestNode.setUrl(url);
+ httpRequestNode.setReturn('obj');
+ httpRequestNode.clickOk();
+
+ debugNode.edit();
+ debugNode.setOutput('.title');
+ debugNode.clickOk();
+
+ injectNode.connect(changeNodeSetPost);
+ changeNodeSetPost.connect(httpRequestNode);
+ httpRequestNode.connect(debugNode);
+
+ // The code for confirmation starts from here.
+ var httpInNode = workspace.addNode('httpIn', 0, 200);
+ var templateNode = workspace.addNode('template');
+ var changeNodeSetHeader = workspace.addNode('change');
+ var httpResponseNode = workspace.addNode('httpResponse');
+
+ httpInNode.edit();
+ httpInNode.setMethod('get');
+ httpInNode.setUrl('/json-response');
+ httpInNode.clickOk();
+
+ templateNode.edit();
+ templateNode.setSyntax('mustache');
+ templateNode.setFormat('handlebars');
+ templateNode.setTemplate('{"title": "Hello"}');
+ templateNode.clickOk();
+
+ changeNodeSetHeader.edit();
+ changeNodeSetHeader.ruleSet('headers', 'msg', '{"content-type":"application/json"}', 'json');
+ changeNodeSetHeader.clickOk();
+
+ httpInNode.connect(templateNode);
+ templateNode.connect(changeNodeSetHeader);
+ changeNodeSetHeader.connect(httpResponseNode);
+ // The code for confirmation ends here.
+
+ workspace.deploy();
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.eql('"Hello"');
+ });
+
+ it('get a binary response', function () {
+ var injectNode = workspace.addNode('inject');
+ var httpRequestNode = workspace.addNode('httpRequest');
+ var debugNode = workspace.addNode('debug');
+
+ httpRequestNode.edit();
+ httpRequestNode.setMethod('GET');
+ httpRequestNode.setUrl(helper.url() + '/settings');
+ httpRequestNode.setReturn('bin');
+ httpRequestNode.clickOk();
+
+ injectNode.connect(httpRequestNode);
+ httpRequestNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode.clickLeftButton();
+
+ debugTab.getMessage().should.eql(['123', '34', '104', '116', '116', '112', '78', '111', '100', '101']);
+ });
+
+ it('set a request header', function () {
+ var injectNode = workspace.addNode('inject');
+ var functionNode = workspace.addNode('function');
+ var httpRequestNode = workspace.addNode('httpRequest');
+ var debugNode = workspace.addNode('debug');
+
+ functionNode.edit();
+ functionNode.setFunction('msg.payload = "data to post";\nreturn msg;');
+ functionNode.clickOk();
+
+ httpRequestNode.edit();
+ httpRequestNode.setMethod('POST');
+ var url = helper.url() + httpNodeRoot + '/set-header';
+ httpRequestNode.setUrl(url);
+ httpRequestNode.clickOk();
+
+ injectNode.connect(functionNode);
+ functionNode.connect(httpRequestNode);
+ httpRequestNode.connect(debugNode);
+
+ // The code for confirmation starts from here.
+ var httpInNode = workspace.addNode('httpIn', 0, 200);
+ var templateNode = workspace.addNode('template');
+ var httpResponseNode = workspace.addNode('httpResponse');
+
+ httpInNode.edit();
+ httpInNode.setMethod('post');
+ httpInNode.setUrl('/set-header');
+ httpInNode.clickOk();
+
+ templateNode.edit();
+ templateNode.setSyntax('mustache');
+ templateNode.setFormat('handlebars');
+ templateNode.setTemplate('{{ payload }}');
+ templateNode.clickOk();
+
+ httpInNode.connect(templateNode);
+ templateNode.connect(httpResponseNode);
+ // The code for confirmation ends here.
+
+ workspace.deploy();
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.eql('"data to post"');
+ });
+ });
+});
diff --git a/test/editor/specs/scenario/cookbook_messages_uispec.js b/test/editor/specs/scenario/cookbook_messages_uispec.js
new file mode 100644
index 000000000..a9465e5d8
--- /dev/null
+++ b/test/editor/specs/scenario/cookbook_messages_uispec.js
@@ -0,0 +1,142 @@
+/**
+ * Copyright JS Foundation and other contributors, http://js.foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ **/
+
+var when = require('when');
+var should = require('should');
+var fs = require('fs-extra');
+
+var helper = require('../../editor_helper');
+var debugTab = require('../../pageobjects/editor/debugTab_page');
+var workspace = require('../../pageobjects/editor/workspace_page');
+var specUtil = require('../../pageobjects/util/spec_util_page');
+
+var httpNodeRoot = '/api';
+
+// https://cookbook.nodered.org/
+describe('cookbook', function () {
+ beforeEach(function () {
+ workspace.init();
+ });
+
+ before(function () {
+ helper.startServer();
+ });
+
+ after(function () {
+ helper.stopServer();
+ });
+
+ describe('messages', function () {
+ it('set a message property to a fixed value', function () {
+ var injectNode = workspace.addNode('inject');
+ var changeNode = workspace.addNode('change');
+ var debugNode = workspace.addNode('debug');
+
+ changeNode.edit();
+ changeNode.ruleSet('payload', 'msg', 'Hello World!');
+ changeNode.clickOk();
+
+ injectNode.connect(changeNode);
+ changeNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.eql('"Hello World!"');
+ });
+
+ it('delete a message property', function () {
+ var injectNode = workspace.addNode('inject');
+ var changeNode = workspace.addNode('change');
+ var debugNode = workspace.addNode('debug');
+
+ changeNode.edit();
+ changeNode.ruleDelete();
+ changeNode.clickOk();
+
+ injectNode.connect(changeNode);
+ changeNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.eql('undefined');
+ });
+
+ it('move a message property', function () {
+ var injectNode = workspace.addNode('inject');
+ var changeNode = workspace.addNode('change');
+ var debugNode = workspace.addNode('debug');
+
+ injectNode.edit();
+ injectNode.setTopic('Hello');
+ injectNode.clickOk();
+
+ changeNode.edit();
+ changeNode.ruleMove('topic', 'payload');
+ changeNode.clickOk();
+
+ injectNode.connect(changeNode);
+ changeNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode.clickLeftButton();
+ debugTab.getMessage().should.eql('"Hello"');
+ });
+
+ it('map a property between different numeric ranges', function () {
+ var injectNode1 = workspace.addNode('inject');
+ var injectNode2 = workspace.addNode('inject', 0, 100);
+ var injectNode3 = workspace.addNode('inject', 0, 200);
+ var rangeNode = workspace.addNode('range', 200, 100);
+ var debugNode = workspace.addNode('debug', 400);
+
+ injectNode1.edit();
+ injectNode1.setPayload('num', 0);
+ injectNode1.clickOk();
+ injectNode2.edit();
+ injectNode2.setPayload('num', 512);
+ injectNode2.clickOk();
+ injectNode3.edit();
+ injectNode3.setPayload('num', 1023);
+ injectNode3.clickOk();
+
+ rangeNode.edit();
+ rangeNode.setAction('clamp');
+ rangeNode.setRange(0, 1023, 0, 5);
+ rangeNode.clickOk();
+
+ injectNode1.connect(rangeNode);
+ injectNode2.connect(rangeNode);
+ injectNode3.connect(rangeNode);
+ rangeNode.connect(debugNode);
+
+ workspace.deploy();
+
+ debugTab.open();
+ injectNode1.clickLeftButton();
+ debugTab.getMessage(1).should.eql('0');
+ injectNode2.clickLeftButton();
+ debugTab.getMessage(2).should.eql('2.5024437927663734');
+ injectNode3.clickLeftButton();
+ debugTab.getMessage(3).should.eql('5');
+ });
+ });
+});
diff --git a/test/editor/specs/scenario/cookbook_uispec.js b/test/editor/specs/scenario/cookbook_uispec.js
deleted file mode 100644
index 6e16ca8a7..000000000
--- a/test/editor/specs/scenario/cookbook_uispec.js
+++ /dev/null
@@ -1,441 +0,0 @@
-/**
- * Copyright JS Foundation and other contributors, http://js.foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- **/
-
-var when = require('when');
-var should = require("should");
-var fs = require('fs-extra');
-
-var helper = require("../../editor_helper");
-var debugTab = require('../../pageobjects/editor/debugTab_page');
-var workspace = require('../../pageobjects/editor/workspace_page');
-var specUtil = require('../../pageobjects/util/spec_util_page');
-
-var httpNodeRoot = "/api";
-
-// https://cookbook.nodered.org/
-describe('cookbook', function() {
- beforeEach(function() {
- workspace.init();
- });
-
- before(function() {
- helper.startServer();
- });
-
- after(function() {
- helper.stopServer();
- });
-
- describe('messages', function() {
- it('set a message property to a fixed value', function() {
- var injectNode = workspace.addNode("inject");
- var changeNode = workspace.addNode("change");
- var debugNode = workspace.addNode("debug");
-
- changeNode.edit();
- changeNode.ruleSet("payload", "msg", "Hello World!");
- changeNode.clickOk();
-
- injectNode.connect(changeNode);
- changeNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.eql('"Hello World!"');
- });
-
- it('delete a message property', function() {
- var injectNode = workspace.addNode("inject");
- var changeNode = workspace.addNode("change");
- var debugNode = workspace.addNode("debug");
-
- changeNode.edit();
- changeNode.ruleDelete();
- changeNode.clickOk();
-
- injectNode.connect(changeNode);
- changeNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.eql("undefined");
- });
-
- it('move a message property', function() {
- var injectNode = workspace.addNode("inject");
- var changeNode = workspace.addNode("change");
- var debugNode = workspace.addNode("debug");
-
- injectNode.edit();
- injectNode.setTopic("Hello");
- injectNode.clickOk();
-
- changeNode.edit();
- changeNode.ruleMove("topic", "payload");
- changeNode.clickOk();
-
- injectNode.connect(changeNode);
- changeNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.eql('"Hello"');
- });
-
- it('map a property between different numeric ranges', function() {
- var injectNode1 = workspace.addNode("inject");
- var injectNode2 = workspace.addNode("inject", 0, 100);
- var injectNode3 = workspace.addNode("inject", 0, 200);
- var rangeNode = workspace.addNode("range", 200, 100);
- var debugNode = workspace.addNode("debug", 400);
-
- injectNode1.edit();
- injectNode1.setPayload("num", 0);
- injectNode1.clickOk();
- injectNode2.edit();
- injectNode2.setPayload("num", 512);
- injectNode2.clickOk();
- injectNode3.edit();
- injectNode3.setPayload("num", 1023);
- injectNode3.clickOk();
-
- rangeNode.edit();
- rangeNode.setAction("clamp");
- rangeNode.setRange(0, 1023, 0, 5);
- rangeNode.clickOk();
-
- injectNode1.connect(rangeNode);
- injectNode2.connect(rangeNode);
- injectNode3.connect(rangeNode);
- rangeNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode1.clickLeftButton();
- debugTab.getMessage(1).should.eql('0');
- injectNode2.clickLeftButton();
- debugTab.getMessage(2).should.eql('2.5024437927663734');
- injectNode3.clickLeftButton();
- debugTab.getMessage(3).should.eql('5');
- });
- });
-
- describe('flow control', function() {
- it('trigger a flow whenever Node-RED starts', function() {
- var injectNode = workspace.addNode("inject");
- var debugNode = workspace.addNode("debug");
-
- injectNode.edit();
- injectNode.setPayload("str", "Started!")
- injectNode.setOnce(true);
- injectNode.clickOk();
- injectNode.connect(debugNode);
-
- debugTab.open();
- workspace.deploy();
- debugTab.getMessage().should.eql('"Started!"');
- });
-
- it('trigger a flow at regular intervals', function() {
- var injectNode = workspace.addNode("inject");
- var debugNode = workspace.addNode("debug");
-
- injectNode.edit();
- injectNode.setRepeat("interval");
- injectNode.setRepeatInterval(1);
- injectNode.clickOk();
- injectNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- specUtil.pause(1000);
- var t1 = Number(debugTab.getMessage(1));
- t1.should.within(1500000000000, 3000000000000);
- specUtil.pause(1000);
- debugTab.getMessage(2).should.within(t1 + 900, 3000000000000);
- });
-
- // skip this case since it needs up to one minite.
- it.skip('trigger a flow at a specific time');
- });
-
- describe('HTTP requests', function() {
- it('simple get request', function() {
- var injectNode = workspace.addNode("inject");
- var httpRequetNode = workspace.addNode("httpRequest");
- var htmlNode = workspace.addNode("html");
- var debugNode = workspace.addNode("debug");
-
- httpRequetNode.edit();
- httpRequetNode.setMethod("GET");
- httpRequetNode.setUrl(helper.url());
- httpRequetNode.clickOk();
-
- htmlNode.edit();
- htmlNode.setSelector("title");
- htmlNode.clickOk();
-
- injectNode.connect(httpRequetNode);
- httpRequetNode.connect(htmlNode);
- htmlNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.eql('"Node-RED"');
- });
-
- it('set the URL of a request', function() {
- var injectNode = workspace.addNode("inject");
- var changeNode = workspace.addNode("change");
- var httpRequetNode = workspace.addNode("httpRequest");
- var debugNode = workspace.addNode("debug");
-
- injectNode.edit();
- injectNode.setPayload("str", helper.url());
- injectNode.clickOk();
-
- changeNode.edit();
- changeNode.ruleSet("url", "msg", "payload", "msg");
- changeNode.clickOk();
-
- injectNode.connect(changeNode);
- changeNode.connect(httpRequetNode);
- httpRequetNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.containEql('Node-RED');
- });
-
- it('set the URL of a request using a template', function() {
- var injectNode = workspace.addNode("inject");
- var changeNode = workspace.addNode("change");
- var httpRequetNode = workspace.addNode("httpRequest");
- var debugNode = workspace.addNode("debug");
-
- injectNode.edit();
- injectNode.setPayload("str", 'settings');
- injectNode.clickOk();
-
- changeNode.edit();
- changeNode.ruleSet("query", "msg", "payload", "msg");
- changeNode.clickOk();
-
- httpRequetNode.edit();
- httpRequetNode.setUrl(helper.url() + "/{{{query}}}");
- httpRequetNode.clickOk();
-
- injectNode.connect(changeNode);
- changeNode.connect(httpRequetNode);
- httpRequetNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.containEql('httpNodeRoot');
- });
-
- it('set the query string parameters', function() {
- var injectNode = workspace.addNode("inject");
- var changeNode = workspace.addNode("change");
- var httpRequetNode = workspace.addNode("httpRequest");
- var debugNode = workspace.addNode("debug");
-
- injectNode.edit();
- injectNode.setPayload("str", 'Nick');
- injectNode.clickOk();
-
- changeNode.edit();
- changeNode.ruleSet("query", "msg", "payload", "msg");
- changeNode.clickOk();
-
- httpRequetNode.edit();
- httpRequetNode.setUrl(helper.url() + httpNodeRoot + '/set-query?q={{{query}}}');
- httpRequetNode.clickOk();
-
- injectNode.connect(changeNode);
- changeNode.connect(httpRequetNode);
- httpRequetNode.connect(debugNode);
-
- // The code for confirmation starts from here.
- var httpInNode = workspace.addNode("httpIn", 0, 200);
- var templateNode = workspace.addNode("template");
- var httpResponseNode = workspace.addNode("httpResponse");
-
- httpInNode.edit();
- httpInNode.setMethod("get");
- httpInNode.setUrl("/set-query");
- httpInNode.clickOk();
-
- templateNode.edit();
- templateNode.setSyntax("mustache");
- templateNode.setFormat("handlebars");
- templateNode.setTemplate("Hello {{req.query.q}}");
- templateNode.clickOk();
-
- httpInNode.connect(templateNode);
- templateNode.connect(httpResponseNode);
- // The code for confirmation ends here.
-
- workspace.deploy();
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.eql('"Hello Nick"');
- });
-
- it('get a parsed JSON response', function() {
- var injectNode = workspace.addNode("inject");
- var changeNodeSetPost = workspace.addNode("change");
- var httpRequetNode = workspace.addNode("httpRequest");
- var debugNode = workspace.addNode("debug");
-
- injectNode.edit();
- injectNode.setPayload("str", "json-response");
- injectNode.clickOk();
-
- changeNodeSetPost.edit();
- changeNodeSetPost.ruleSet("post", "msg", "payload", "msg");
- changeNodeSetPost.clickOk();
-
- httpRequetNode.edit();
- httpRequetNode.setMethod("GET");
- var url = helper.url() + httpNodeRoot + "/{{post}}";
- httpRequetNode.setUrl(url);
- httpRequetNode.setReturn("obj");
- httpRequetNode.clickOk();
-
- debugNode.edit();
- debugNode.setOutput(".title");
- debugNode.clickOk();
-
- injectNode.connect(changeNodeSetPost);
- changeNodeSetPost.connect(httpRequetNode);
- httpRequetNode.connect(debugNode);
-
- // The code for confirmation starts from here.
- var httpInNode = workspace.addNode("httpIn", 0, 200);
- var templateNode = workspace.addNode("template");
- var changeNodeSetHeader = workspace.addNode("change");
- var httpResponseNode = workspace.addNode("httpResponse");
-
- httpInNode.edit();
- httpInNode.setMethod("get");
- httpInNode.setUrl("/json-response");
- httpInNode.clickOk();
-
- templateNode.edit();
- templateNode.setSyntax("mustache");
- templateNode.setFormat("handlebars");
- templateNode.setTemplate('{"title": "Hello"}');
- templateNode.clickOk();
-
- changeNodeSetHeader.edit();
- changeNodeSetHeader.ruleSet("headers", "msg", '{"content-type":"application/json"}', "json");
- changeNodeSetHeader.clickOk();
-
- httpInNode.connect(templateNode);
- templateNode.connect(changeNodeSetHeader);
- changeNodeSetHeader.connect(httpResponseNode);
- // The code for confirmation ends here.
-
- workspace.deploy();
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.eql('"Hello"');
- });
-
- it('get a binary response', function() {
- var injectNode = workspace.addNode("inject");
- var httpRequetNode = workspace.addNode("httpRequest");
- var debugNode = workspace.addNode("debug");
-
- httpRequetNode.edit();
- httpRequetNode.setMethod("GET");
- httpRequetNode.setUrl(helper.url() + "/settings");
- httpRequetNode.setReturn("bin");
- httpRequetNode.clickOk();
-
- injectNode.connect(httpRequetNode);
- httpRequetNode.connect(debugNode);
-
- workspace.deploy();
-
- debugTab.open();
- injectNode.clickLeftButton();
-
- debugTab.getMessage().should.eql(['123', '34', '104', '116', '116', '112', '78', '111', '100', '101']);
- });
-
- it('set a request header', function() {
- var injectNode = workspace.addNode("inject");
- var functionNode = workspace.addNode("function");
- var httpRequetNode = workspace.addNode("httpRequest");
- var debugNode = workspace.addNode("debug");
-
- functionNode.edit();
- functionNode.setFunction('msg.payload = "data to post";\nreturn msg;');
- functionNode.clickOk();
-
- httpRequetNode.edit();
- httpRequetNode.setMethod("POST");
- var url = helper.url() + httpNodeRoot + "/set-header";
- httpRequetNode.setUrl(url);
- httpRequetNode.clickOk();
-
- injectNode.connect(functionNode);
- functionNode.connect(httpRequetNode);
- httpRequetNode.connect(debugNode);
-
- // The code for confirmation starts from here.
- var httpInNode = workspace.addNode("httpIn", 0, 200);
- var templateNode = workspace.addNode("template");
- var httpResponseNode = workspace.addNode("httpResponse");
-
- httpInNode.edit();
- httpInNode.setMethod("post");
- httpInNode.setUrl("/set-header");
- httpInNode.clickOk();
-
- templateNode.edit();
- templateNode.setSyntax("mustache");
- templateNode.setFormat("handlebars");
- templateNode.setTemplate("{{ payload }}");
- templateNode.clickOk();
-
- httpInNode.connect(templateNode);
- templateNode.connect(httpResponseNode);
- // The code for confirmation ends here.
-
- workspace.deploy();
- debugTab.open();
- injectNode.clickLeftButton();
- debugTab.getMessage().should.eql('"data to post"');
- });
- });
-});