1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Make scenario structures same as cookbook

This commit is contained in:
Kazuhito Yokoi 2020-02-17 14:17:13 +09:00
parent 2e38999506
commit f88bfa059d
5 changed files with 532 additions and 450 deletions

View File

@ -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');
});
});

View File

@ -23,16 +23,16 @@ var workspace = require('../../pageobjects/editor/workspace_page');
var httpNodeRoot = "/api"; var httpNodeRoot = "/api";
// https://cookbook.nodered.org/ // https://cookbook.nodered.org/
describe('cookbook', function() { describe('cookbook', function () {
beforeEach(function() { beforeEach(function () {
workspace.init(); workspace.init();
}); });
before(function() { before(function () {
helper.startServer(); helper.startServer();
}); });
after(function() { after(function () {
helper.stopServer(); helper.stopServer();
}); });
@ -359,7 +359,7 @@ describe('cookbook', function() {
debugTab.getMessage().indexOf('Text file').should.not.eql(-1); 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 httpInNode = workspace.addNode("httpIn");
var templateNode = workspace.addNode("template"); var templateNode = workspace.addNode("template");
var httpResponseNode = workspace.addNode("httpResponse"); var httpResponseNode = workspace.addNode("httpResponse");
@ -383,7 +383,7 @@ describe('cookbook', function() {
var httpRequestNode = workspace.addNode("httpRequest"); var httpRequestNode = workspace.addNode("httpRequest");
var debugNode = workspace.addNode("debug"); var debugNode = workspace.addNode("debug");
injectNode.edit() injectNode.edit();
injectNode.setPayload("str", "Nick"); injectNode.setPayload("str", "Nick");
injectNode.clickOk(); injectNode.clickOk();
@ -427,7 +427,7 @@ describe('cookbook', function() {
var httpRequestNode = workspace.addNode("httpRequest"); var httpRequestNode = workspace.addNode("httpRequest");
var debugNode = workspace.addNode("debug"); var debugNode = workspace.addNode("debug");
injectNode.edit() injectNode.edit();
injectNode.setPayload("str", "name=Nick"); injectNode.setPayload("str", "name=Nick");
injectNode.clickOk(); injectNode.clickOk();
@ -451,7 +451,7 @@ describe('cookbook', function() {
debugTab.getMessage().indexOf('Hello Nick!').should.not.eql(-1); 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 httpInNode = workspace.addNode("httpIn");
var templateNode = workspace.addNode("template"); var templateNode = workspace.addNode("template");
var httpResponseNode = workspace.addNode("httpResponse"); var httpResponseNode = workspace.addNode("httpResponse");
@ -476,7 +476,7 @@ describe('cookbook', function() {
var httpRequestNode = workspace.addNode("httpRequest"); var httpRequestNode = workspace.addNode("httpRequest");
var debugNode = workspace.addNode("debug"); var debugNode = workspace.addNode("debug");
injectNode.edit() injectNode.edit();
injectNode.setPayload("json", '{"name":"Nick"}'); injectNode.setPayload("json", '{"name":"Nick"}');
injectNode.clickOk(); injectNode.clickOk();

View File

@ -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('<title>Node-RED</title>');
});
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"');
});
});
});

View File

@ -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');
});
});
});

View File

@ -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('<title>Node-RED</title>');
});
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"');
});
});
});