From a364d4950d7fc69612331f2a523d9e5266c63b27 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Mon, 2 Dec 2019 12:43:13 +0900 Subject: [PATCH] Fix test cases for UI --- test/editor/editor_helper.js | 7 +- .../editor/pageobjects/editor/palette_page.js | 4 +- .../pageobjects/editor/workspace_page.js | 10 +- .../nodes/core/core/20-inject_page.js | 4 +- .../nodes/core/core/58-debug_page.js | 2 +- .../nodes/core/io/10-mqttconfig_page.js | 7 +- .../nodes/core/io/21-httpin_page.js | 10 +- .../nodes/core/logic/15-change_page.js | 4 +- .../nodes/core/storage/50-filein_page.js | 10 +- test/editor/pageobjects/nodes/node_page.js | 10 +- .../pageobjects/nodes/nodefactory_page.js | 8 +- test/editor/specs/editor/workspace_uispec.js | 2 +- .../scenario/cookbook_endpoint_uispec.js | 170 +++++++++--------- test/editor/specs/scenario/cookbook_uispec.js | 36 ++-- test/editor/wdio.conf.js | 4 +- 15 files changed, 149 insertions(+), 139 deletions(-) diff --git a/test/editor/editor_helper.js b/test/editor/editor_helper.js index 8de197cef..81e3a54f5 100644 --- a/test/editor/editor_helper.js +++ b/test/editor/editor_helper.js @@ -52,8 +52,11 @@ function getFlowFilename() { } function cleanup(flowFile) { - deleteFile(homeDir+"/"+flowFile); - deleteFile(homeDir+"/."+flowFile+".backup"); + var credentialFile = flowFile.replace(/\.json$/, '') + '_cred.json'; + deleteFile(homeDir + "/" + flowFile); + deleteFile(homeDir + "/." + flowFile + ".backup"); + deleteFile(homeDir + "/" + credentialFile); + deleteFile(homeDir + "/." + credentialFile + ".backup"); } function deleteFile(flowFile) { diff --git a/test/editor/pageobjects/editor/palette_page.js b/test/editor/pageobjects/editor/palette_page.js index 878f218fb..a35859c5f 100644 --- a/test/editor/pageobjects/editor/palette_page.js +++ b/test/editor/pageobjects/editor/palette_page.js @@ -17,7 +17,7 @@ var idMap = { // input "inject": ".red-ui-palette-node[data-palette-type='inject']", - "httpin": ".red-ui-palette-node[data-palette-type='http in']", + "httpIn": ".red-ui-palette-node[data-palette-type='http in']", "mqttIn": ".red-ui-palette-node[data-palette-type='mqtt in']", // output "debug": ".red-ui-palette-node[data-palette-type='debug']", @@ -32,7 +32,7 @@ var idMap = { "html": ".red-ui-palette-node[data-palette-type='html']", "json": ".red-ui-palette-node[data-palette-type='json']", // storage - "filein": ".red-ui-palette-node[data-palette-type='file in']", + "fileIn": ".red-ui-palette-node[data-palette-type='file in']", }; function getId(type) { diff --git a/test/editor/pageobjects/editor/workspace_page.js b/test/editor/pageobjects/editor/workspace_page.js index 18e50dcf2..560a0992f 100644 --- a/test/editor/pageobjects/editor/workspace_page.js +++ b/test/editor/pageobjects/editor/workspace_page.js @@ -14,7 +14,7 @@ * limitations under the License. **/ - var when = require("when"); +var when = require("when"); var events = require("nr-test-utils").require("@node-red/runtime/lib/events.js"); @@ -44,6 +44,7 @@ function addNode(type, x, y) { previousY = previousY + flowLayout.heightInterval; } } + browser.waitForVisible(palette.getId(type)); browser.moveToObject(palette.getId(type)); browser.buttonDown(); browser.moveToObject("#red-ui-palette-search", previousX + 300, previousY + 100); // adjust to the top-left corner of workspace. @@ -56,7 +57,12 @@ function addNode(type, x, y) { } function deleteAllNodes() { - browser.click('.red-ui-workspace-chart-event-layer'); + browser.waitForVisible('.red-ui-workspace-chart-event-layer'); + try { + browser.click('.red-ui-workspace-chart-event-layer'); + } catch (e) { + console.log(e); + } browser.keys(['Control', 'a', 'a', 'Control']); // call twice to release the keys. browser.keys(['Delete']); } diff --git a/test/editor/pageobjects/nodes/core/core/20-inject_page.js b/test/editor/pageobjects/nodes/core/core/20-inject_page.js index 82a4e6d6e..38e6e32ed 100644 --- a/test/editor/pageobjects/nodes/core/core/20-inject_page.js +++ b/test/editor/pageobjects/nodes/core/core/20-inject_page.js @@ -47,11 +47,11 @@ injectNode.prototype.setPayload = function(payloadType, payload) { // Open a payload type list. browser.clickWithWait('//*[contains(@class, "red-ui-typedInput-container")]'); // Select a payload type. - var payloadTypeXPath = '//*[@class="red-ui-typedInput-options"]/a[' + payloadTypeList[payloadType] + ']'; + var payloadTypeXPath = '//*[contains(@class, "red-ui-typedInput-options")]/a[' + payloadTypeList[payloadType] + ']'; browser.clickWithWait(payloadTypeXPath); if (payload) { // Input a value. - browser.setValue('//*[@class="red-ui-typedInput-input"]/input', payload); + browser.setValue('//*[contains(@class, "red-ui-typedInput-input")]/input', payload); } } diff --git a/test/editor/pageobjects/nodes/core/core/58-debug_page.js b/test/editor/pageobjects/nodes/core/core/58-debug_page.js index 2b1eabe64..52cb60f44 100644 --- a/test/editor/pageobjects/nodes/core/core/58-debug_page.js +++ b/test/editor/pageobjects/nodes/core/core/58-debug_page.js @@ -31,7 +31,7 @@ debugNode.prototype.setOutput = function(complete) { browser.clickWithWait('//*[contains(@class, "red-ui-typedInput-container")]/button'); if (complete !== 'true') { // Select the "msg" type. - browser.clickWithWait('//div[@class="red-ui-typedInput-options"][1]/a[1]'); + browser.clickWithWait('//div[contains(@class, "red-ui-typedInput-options")][1]/a[1]'); // Input the path in msg. browser.clickWithWait('//*[contains(@class, "red-ui-typedInput-input")]/input'); browser.keys(keyPage.selectAll()); diff --git a/test/editor/pageobjects/nodes/core/io/10-mqttconfig_page.js b/test/editor/pageobjects/nodes/core/io/10-mqttconfig_page.js index 69266f9e8..3266a1bd3 100644 --- a/test/editor/pageobjects/nodes/core/io/10-mqttconfig_page.js +++ b/test/editor/pageobjects/nodes/core/io/10-mqttconfig_page.js @@ -23,13 +23,14 @@ function setServer(broker, port) { function clickOk() { browser.clickWithWait('#node-config-dialog-ok'); // Wait until an config dialog closes. - browser.waitForVisible('#node-config-dialog-ok', 2000, true); + browser.waitForVisible('#node-config-dialog-ok', 4000, true); } function edit() { - browser.clickWithWait('#node-input-lookup-broker'); + browser.waitForVisible('#node-input-lookup-broker'); + browser.click('#node-input-lookup-broker'); // Wait until a config dialog opens. - browser.waitForVisible('#node-config-dialog-ok', 2000); + browser.waitForVisible('#node-config-dialog-ok', 4000); } module.exports = { diff --git a/test/editor/pageobjects/nodes/core/io/21-httpin_page.js b/test/editor/pageobjects/nodes/core/io/21-httpin_page.js index 97648f395..9454ef034 100644 --- a/test/editor/pageobjects/nodes/core/io/21-httpin_page.js +++ b/test/editor/pageobjects/nodes/core/io/21-httpin_page.js @@ -18,18 +18,18 @@ var util = require("util"); var nodePage = require("../../node_page"); -function httpinNode(id) { +function httpInNode(id) { nodePage.call(this, id); } -util.inherits(httpinNode, nodePage); +util.inherits(httpInNode, nodePage); -httpinNode.prototype.setMethod = function(method) { +httpInNode.prototype.setMethod = function(method) { browser.selectWithWait('#node-input-method', method); } -httpinNode.prototype.setUrl = function(url) { +httpInNode.prototype.setUrl = function(url) { browser.setValue('#node-input-url', url); } -module.exports = httpinNode; +module.exports = httpInNode; diff --git a/test/editor/pageobjects/nodes/core/logic/15-change_page.js b/test/editor/pageobjects/nodes/core/logic/15-change_page.js index 51589f7b5..82441c9bc 100644 --- a/test/editor/pageobjects/nodes/core/logic/15-change_page.js +++ b/test/editor/pageobjects/nodes/core/logic/15-change_page.js @@ -55,7 +55,7 @@ changeNode.prototype.ruleSet = function(p, pt, to, tot, index) { if (pt) { browser.clickWithWait('//*[@id="node-input-rule-container"]/li[' + index + ']/div/div[1]/div/button[1]'); var num = 5 * (index - 1) + 1; - var ptXPath = '//div[@class="red-ui-typedInput-options"][' + num + ']/a[' + ptType[pt] + ']'; + var ptXPath = '//div[contains(@class, "red-ui-typedInput-options")][' + num + ']/a[' + ptType[pt] + ']'; browser.clickWithWait(ptXPath); } if (p) { @@ -64,7 +64,7 @@ changeNode.prototype.ruleSet = function(p, pt, to, tot, index) { if (tot) { browser.clickWithWait('//*[@id="node-input-rule-container"]/li[' + index + ']/div/div[2]/div[2]/button[1]'); var num = 5 * (index - 1) + 2; - var totXPath = '//div[@class="red-ui-typedInput-options"][' + num + ']/a[' + totType[tot] + ']'; + var totXPath = '//div[contains(@class, "red-ui-typedInput-options")][' + num + ']/a[' + totType[tot] + ']'; browser.clickWithWait(totXPath); } if (to) { diff --git a/test/editor/pageobjects/nodes/core/storage/50-filein_page.js b/test/editor/pageobjects/nodes/core/storage/50-filein_page.js index 5a327f14c..942ea63d8 100644 --- a/test/editor/pageobjects/nodes/core/storage/50-filein_page.js +++ b/test/editor/pageobjects/nodes/core/storage/50-filein_page.js @@ -18,11 +18,11 @@ var util = require("util"); var nodePage = require("../../node_page"); -function fileinNode(id) { +function fileInNode(id) { nodePage.call(this, id); } -util.inherits(fileinNode, nodePage); +util.inherits(fileInNode, nodePage); var formatType = { "utf8": 1, @@ -31,14 +31,14 @@ var formatType = { "stream": 4 }; -fileinNode.prototype.setFilename = function(filename) { +fileInNode.prototype.setFilename = function(filename) { browser.setValue('#node-input-filename', filename); } -fileinNode.prototype.setOutput = function(format) { +fileInNode.prototype.setOutput = function(format) { browser.clickWithWait('#node-input-format'); var formatTypeXPath = '//*[@id="node-input-format"]/option[' + formatType[format] + ']'; browser.clickWithWait(formatTypeXPath); } -module.exports = fileinNode; +module.exports = fileInNode; diff --git a/test/editor/pageobjects/nodes/node_page.js b/test/editor/pageobjects/nodes/node_page.js index a093a2335..5234362ae 100644 --- a/test/editor/pageobjects/nodes/node_page.js +++ b/test/editor/pageobjects/nodes/node_page.js @@ -22,13 +22,13 @@ Node.prototype.edit = function() { browser.clickWithWait(this.id); browser.clickWithWait(this.id); // Wait until an edit dialog opens. - browser.waitForVisible('#node-dialog-ok', 2000); + browser.waitForVisible('#node-dialog-ok', 4000); } Node.prototype.clickOk = function() { browser.clickWithWait('#node-dialog-ok'); // Wait untile an edit dialog closes. - browser.waitForVisible('#node-dialog-ok', 2000, true); + browser.waitForVisible('#node-dialog-ok', 4000, true); browser.pause(50); } @@ -38,8 +38,10 @@ Node.prototype.connect = function(targetNode) { browser.dragAndDrop(outputPort, inputPort) } -Node.prototype.clickLeftButton = function() { - browser.clickWithWait(this.id + '/*[@class="red-ui-flow-node-button"]'); +Node.prototype.clickLeftButton = function () { + browser.moveToObject(this.id + '/*[@class="red-ui-flow-node-button"]'); + browser.buttonDown(); + browser.buttonUp(); } module.exports = Node; diff --git a/test/editor/pageobjects/nodes/nodefactory_page.js b/test/editor/pageobjects/nodes/nodefactory_page.js index 8cb364ad1..c518d89ff 100644 --- a/test/editor/pageobjects/nodes/nodefactory_page.js +++ b/test/editor/pageobjects/nodes/nodefactory_page.js @@ -20,20 +20,20 @@ var templateNode = require('./core/core/80-template_page'); var functionNode = require('./core/core/80-function_page'); var mqttInNode = require('./core/io/10-mqttin_page'); var mqttOutNode = require('./core/io/10-mqttout_page'); -var httpinNode = require('./core/io/21-httpin_page'); +var httpInNode = require('./core/io/21-httpin_page'); var httpResponseNode = require('./core/io/21-httpresponse_page'); var changeNode = require('./core/logic/15-change_page'); var rangeNode = require('./core/logic/16-range_page'); var httpRequestNode = require('./core/io/21-httprequest_page'); var htmlNode = require('./core/parsers/70-HTML_page'); var jsonNode = require('./core/parsers/70-JSON_page'); -var fileinNode = require('./core/storage/50-filein_page'); +var fileInNode = require('./core/storage/50-filein_page'); var nodeCatalog = { // input "inject": injectNode, - "httpin": httpinNode, + "httpIn": httpInNode, "mqttIn":mqttInNode, // output "debug": debugNode, @@ -48,7 +48,7 @@ var nodeCatalog = { "html": htmlNode, "json":jsonNode, // storage - "filein": fileinNode, + "fileIn": fileInNode, } function create(type, id) { diff --git a/test/editor/specs/editor/workspace_uispec.js b/test/editor/specs/editor/workspace_uispec.js index fb6c02b9a..15de1a044 100644 --- a/test/editor/specs/editor/workspace_uispec.js +++ b/test/editor/specs/editor/workspace_uispec.js @@ -37,7 +37,7 @@ describe('Workspace', function() { }); it('should have a right title', function () { - browser.getTitle().should.equal('Node-RED'); + browser.getTitle().should.startWith('Node-RED'); }); it('should output a timestamp', function() { diff --git a/test/editor/specs/scenario/cookbook_endpoint_uispec.js b/test/editor/specs/scenario/cookbook_endpoint_uispec.js index 95b78d03c..9a2ed0710 100644 --- a/test/editor/specs/scenario/cookbook_endpoint_uispec.js +++ b/test/editor/specs/scenario/cookbook_endpoint_uispec.js @@ -38,14 +38,14 @@ describe('cookbook', function() { describe('HTTP endpoints', function () { it('create an HTTP endpoint', function () { - var httpinNode = workspace.addNode("httpin"); + var httpInNode = workspace.addNode("httpIn"); var templateNode = workspace.addNode("template"); var httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("get"); - httpinNode.setUrl("/hello"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/hello"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -53,7 +53,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

Hello World!

\n\n"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -77,14 +77,14 @@ describe('cookbook', function() { }); it('handle query parameters passed to an HTTP endpoint', function () { - var httpinNode = workspace.addNode("httpin"); + var httpInNode = workspace.addNode("httpIn"); var templateNode = workspace.addNode("template"); var httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("get"); - httpinNode.setUrl("/hello-query"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/hello-query"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -92,7 +92,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

Hello {{req.query.name}}!

\n\n"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -116,14 +116,14 @@ describe('cookbook', function() { }); it('handle url parameters in an HTTP endpoint', function () { - var httpinNode = workspace.addNode("httpin"); + var httpInNode = workspace.addNode("httpIn"); var templateNode = workspace.addNode("template"); var httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("get"); - httpinNode.setUrl("/hello-param/:name"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/hello-param/:name"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -131,7 +131,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

Hello {{req.params.name}}!

\n\n"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -155,14 +155,14 @@ describe('cookbook', function() { }); it('access HTTP request headers', function () { - var httpinNode = workspace.addNode("httpin"); + var httpInNode = workspace.addNode("httpIn"); var templateNode = workspace.addNode("template"); var httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("get"); - httpinNode.setUrl("/hello-headers"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/hello-headers"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -170,7 +170,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

User agent: {{req.headers.user-agent}}

\n\n"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -203,7 +203,7 @@ describe('cookbook', function() { var injectNodeTimestamp = workspace.addNode("inject"); var changeNodeStore = workspace.addNode("change"); - var httpinNode = workspace.addNode("httpin", 0, 100); + var httpInNode = workspace.addNode("httpIn", 0, 100); var changeNodeCopy = workspace.addNode("change"); var templateNode = workspace.addNode("template"); var httpResponseNode = workspace.addNode("httpResponse"); @@ -218,10 +218,10 @@ describe('cookbook', function() { injectNodeTimestamp.connect(changeNodeStore); - httpinNode.edit(); - httpinNode.setMethod("get"); - httpinNode.setUrl("/hello-data"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/hello-data"); + httpInNode.clickOk(); changeNodeCopy.edit(); changeNodeCopy.ruleSet("timestamp", "msg", "timestamp", "flow"); @@ -233,7 +233,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

Time: {{ timestamp }}

\n\n"); templateNode.clickOk(); - httpinNode.connect(changeNodeCopy); + httpInNode.connect(changeNodeCopy); changeNodeCopy.connect(templateNode); templateNode.connect(httpResponseNode); @@ -260,15 +260,15 @@ describe('cookbook', function() { }); it('serve JSON content', function () { - var httpinNode = workspace.addNode("httpin"); + var httpInNode = workspace.addNode("httpIn"); var templateNode = workspace.addNode("template"); var changeNode = workspace.addNode("change"); var httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("get"); - httpinNode.setUrl("/hello-json"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/hello-json"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -282,7 +282,7 @@ describe('cookbook', function() { changeNode.ruleSet("headers.content-type", "msg", "application/json", "str", "2"); changeNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(changeNode); changeNode.connect(httpResponseNode); @@ -314,20 +314,20 @@ describe('cookbook', function() { }); it('serve a local file', function () { - var httpinNode = workspace.addNode("httpin"); - var fileinNode = workspace.addNode("filein"); + var httpInNode = workspace.addNode("httpIn"); + var fileInNode = workspace.addNode("fileIn"); var changeNode = workspace.addNode("change", 200, 100); var httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("get"); - httpinNode.setUrl("/hello-file"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/hello-file"); + httpInNode.clickOk(); - fileinNode.edit(); - fileinNode.setFilename("test/resources/file-in-node/test.txt"); - fileinNode.setOutput(""); - fileinNode.clickOk(); + fileInNode.edit(); + fileInNode.setFilename("test/resources/file-in-node/test.txt"); + fileInNode.setOutput(""); + fileInNode.clickOk(); changeNode.edit(); changeNode.ruleSet("headers", "msg", "{}", "json"); @@ -335,8 +335,8 @@ describe('cookbook', function() { changeNode.ruleSet("headers.content-type", "msg", "text/plain", "str", "2"); changeNode.clickOk(); - httpinNode.connect(fileinNode); - fileinNode.connect(changeNode); + httpInNode.connect(fileInNode); + fileInNode.connect(changeNode); changeNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -360,14 +360,14 @@ describe('cookbook', 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 httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("post"); - httpinNode.setUrl("/hello-raw"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("post"); + httpInNode.setUrl("/hello-raw"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -375,7 +375,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

Hello {{ payload }}!

\n\n"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -403,14 +403,14 @@ describe('cookbook', function() { }); it('post form data to a flow', function () { - var httpinNode = workspace.addNode("httpin"); + var httpInNode = workspace.addNode("httpIn"); var templateNode = workspace.addNode("template"); var httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("post"); - httpinNode.setUrl("/hello-form"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("post"); + httpInNode.setUrl("/hello-form"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -418,7 +418,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

Hello {{ payload.name }}!

\n\n"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -452,14 +452,14 @@ describe('cookbook', 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 httpResponseNode = workspace.addNode("httpResponse"); - httpinNode.edit(); - httpinNode.setMethod("post"); - httpinNode.setUrl("/hello-json"); - httpinNode.clickOk(); + httpInNode.edit(); + httpInNode.setMethod("post"); + httpInNode.setUrl("/hello-json"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -467,7 +467,7 @@ describe('cookbook', function() { templateNode.setTemplate("\n\n\n

Hello {{ payload.name }}!

\n\n"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation starts from here. @@ -501,24 +501,22 @@ describe('cookbook', function() { }); it('work with cookies', function () { - this.timeout(60000); - - var httpinNodeFormat = workspace.addNode("httpin"); + var httpInNodeFormat = workspace.addNode("httpIn"); var functionNodeFormat = workspace.addNode("function", 240); var templateNode = workspace.addNode("template", 400); var httpResponseNode = workspace.addNode("httpResponse", 600); - var httpinNodeAdd = workspace.addNode("httpin", 0, 100); + var httpInNodeAdd = workspace.addNode("httpIn", 0, 100); var functionNodeAdd = workspace.addNode("function", 240); var changeNode = workspace.addNode("change", 400); - var httpinNodeClear = workspace.addNode("httpin", 0, 200); + var httpInNodeClear = workspace.addNode("httpIn", 0, 200); var functionNodeClear = workspace.addNode("function", 250); - httpinNodeFormat.edit(); - httpinNodeFormat.setMethod("get"); - httpinNodeFormat.setUrl("/hello-cookie"); - httpinNodeFormat.clickOk(); + httpInNodeFormat.edit(); + httpInNodeFormat.setMethod("get"); + httpInNodeFormat.setUrl("/hello-cookie"); + httpInNodeFormat.clickOk(); functionNodeFormat.edit(); functionNodeFormat.setFunction("msg.payload = JSON.stringify(msg.req.cookies,null,4);\nreturn msg;"); @@ -530,14 +528,14 @@ describe('cookbook', function() { templateNode.setTemplate('\n\n\n

Cookies

\n

Add a cookieClear cookies

\n
{{ payload }}
\n\n'); templateNode.clickOk(); - httpinNodeFormat.connect(functionNodeFormat); + httpInNodeFormat.connect(functionNodeFormat); functionNodeFormat.connect(templateNode); templateNode.connect(httpResponseNode); - httpinNodeAdd.edit(); - httpinNodeAdd.setMethod("get"); - httpinNodeAdd.setUrl("/hello-cookie/add"); - httpinNodeAdd.clickOk(); + httpInNodeAdd.edit(); + httpInNodeAdd.setMethod("get"); + httpInNodeAdd.setUrl("/hello-cookie/add"); + httpInNodeAdd.clickOk(); functionNodeAdd.edit(); functionNodeAdd.setFunction('msg.cookies = { };\n msg.cookies["demo-"+(Math.floor(Math.random()*1000))] = Date.now();\nreturn msg;'); @@ -551,20 +549,20 @@ describe('cookbook', function() { changeNode.ruleSet("headers.location", "msg", httpNodeRoot + "/hello-cookie", "str", "3"); changeNode.clickOk(); - httpinNodeAdd.connect(functionNodeAdd); + httpInNodeAdd.connect(functionNodeAdd); functionNodeAdd.connect(changeNode); changeNode.connect(httpResponseNode); - httpinNodeClear.edit(); - httpinNodeClear.setMethod("get"); - httpinNodeClear.setUrl("/hello-cookie/clear"); - httpinNodeClear.clickOk(); + httpInNodeClear.edit(); + httpInNodeClear.setMethod("get"); + httpInNodeClear.setUrl("/hello-cookie/clear"); + httpInNodeClear.clickOk(); functionNodeClear.edit(); functionNodeClear.setFunction("var cookieNames = Object.keys(msg.req.cookies).filter(function(cookieName) { return /^demo-/.test(cookieName);});\nmsg.cookies = {};\n\ncookieNames.forEach(function(cookieName) {\n msg.cookies[cookieName] = null;\n});\nreturn msg;\n"); functionNodeClear.clickOk(); - httpinNodeClear.connect(functionNodeClear); + httpInNodeClear.connect(functionNodeClear); functionNodeClear.connect(changeNode); workspace.deploy(); diff --git a/test/editor/specs/scenario/cookbook_uispec.js b/test/editor/specs/scenario/cookbook_uispec.js index f14f02469..8619ddb0d 100644 --- a/test/editor/specs/scenario/cookbook_uispec.js +++ b/test/editor/specs/scenario/cookbook_uispec.js @@ -284,14 +284,14 @@ describe('cookbook', function() { httpRequetNode.connect(debugNode); // The code for confirmation starts from here. - var httpinNode = workspace.addNode("httpin", 0, 200); + 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(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/set-query"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -299,7 +299,7 @@ describe('cookbook', function() { templateNode.setTemplate("Hello {{req.query.q}}"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation ends here. @@ -339,15 +339,15 @@ describe('cookbook', function() { httpRequetNode.connect(debugNode); // The code for confirmation starts from here. - var httpinNode = workspace.addNode("httpin", 0, 200); + 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(); + httpInNode.edit(); + httpInNode.setMethod("get"); + httpInNode.setUrl("/json-response"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -359,7 +359,7 @@ describe('cookbook', function() { changeNodeSetHeader.ruleSet("headers", "msg", '{"content-type":"application/json"}', "json"); changeNodeSetHeader.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(changeNodeSetHeader); changeNodeSetHeader.connect(httpResponseNode); // The code for confirmation ends here. @@ -413,14 +413,14 @@ describe('cookbook', function() { httpRequetNode.connect(debugNode); // The code for confirmation starts from here. - var httpinNode = workspace.addNode("httpin", 0, 200); + 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(); + httpInNode.edit(); + httpInNode.setMethod("post"); + httpInNode.setUrl("/set-header"); + httpInNode.clickOk(); templateNode.edit(); templateNode.setSyntax("mustache"); @@ -428,7 +428,7 @@ describe('cookbook', function() { templateNode.setTemplate("{{ payload }}"); templateNode.clickOk(); - httpinNode.connect(templateNode); + httpInNode.connect(templateNode); templateNode.connect(httpResponseNode); // The code for confirmation ends here. diff --git a/test/editor/wdio.conf.js b/test/editor/wdio.conf.js index 37426cf14..26d30570f 100644 --- a/test/editor/wdio.conf.js +++ b/test/editor/wdio.conf.js @@ -64,9 +64,9 @@ exports.config = { 'goog:chromeOptions': { args: process.env.NODE_RED_NON_HEADLESS // Runs tests with opening a browser. - ? ['--disable-gpu'] + ? ['--disable-gpu', '--no-sandbox'] // Runs tests without opening a browser. - : ['--headless', '--disable-gpu', 'window-size=1920,1080'] + : ['--headless', '--disable-gpu', 'window-size=1920,1080', '--no-sandbox'] }, }], //