Add UI test cases for messages on cookbook (#1562)

This commit is contained in:
Kazuki Nakanishi
2018-01-17 18:50:46 +09:00
committed by Nick O'Leary
parent fd4fdb31b5
commit 8d7c157751
14 changed files with 600 additions and 178 deletions

View File

@@ -14,67 +14,125 @@
* limitations under the License.
**/
var RED = require("../../red/red.js");
var when = require("when");
var http = require('http');
var express = require("express");
var fs = require('fs-extra');
var path = require('path');
var app = express();
var RED = require("../../red/red.js");
var utilPage = require("./pageobjects/util/util_page");
var server;
var homeDir = './test/resources/home';
var address = '127.0.0.1';
var listenPort = 0; // use ephemeral port
var url;
/*
* Set false when you need a flow to reproduce the failed test case.
* The flow file is under "homeDir" defined above.
*/
var isDeleteFlow = true;
function cleanup() {
var flowsFile = homeDir + '/flows_'+require('os').hostname()+'.json';
function getFlowFilename() {
var orig = Error.prepareStackTrace;
var err = new Error();
Error.prepareStackTrace = function (err, stack) {
return stack;
};
// Two level higher caller is the actual caller (e.g. a caller of startServer).
var filepath = err.stack[2].getFileName();
var filename = path.basename(filepath, ".js");
Error.prepareStackTrace = orig;
var flowFile = 'flows_' + filename + '.json';
return flowFile;
}
function cleanup(flowFile) {
deleteFile(homeDir+"/"+flowFile);
deleteFile(homeDir+"/."+flowFile+".backup");
}
function deleteFile(flowFile) {
try {
fs.statSync(flowsFile);
fs.unlinkSync(flowsFile);
} catch (err) {
}
fs.statSync(flowFile);
if (isDeleteFlow) {
fs.unlinkSync(flowFile);
}
} catch (e) {}
};
module.exports = {
startServer: function(done) {
cleanup();
app.use("/",express.static("public"));
server = http.createServer(app);
var settings = {
httpAdminRoot: "/",
httpNodeRoot: "/api",
userDir: homeDir,
functionGlobalContext: { }, // enables global context
SKIP_BUILD_CHECK: true,
logging: {console: {level:'off'}}
};
RED.init(server, settings);
app.use(settings.httpAdminRoot,RED.httpAdmin);
app.use(settings.httpNodeRoot,RED.httpNode);
server.listen(listenPort, address);
server.on('listening', function() {
var port = server.address().port;
url = 'http://' + address + ':' + port;
});
RED.start().then(function() {
done();
});
startServer: function() {
try{
utilPage.init();
// Name a flow file including caller filename so that multiple Node-RED servers can run simultaneously.
// Call this method here because retrieving the caller filename by call stack.
var flowFilename = getFlowFilename();
browser.windowHandleMaximize();
browser.call(function () {
// return when.promise(function(resolve, reject) {
return new Promise(function(resolve, reject) {
cleanup(flowFilename);
app.use("/",express.static("public"));
server = http.createServer(app);
var settings = {
httpAdminRoot: "/",
httpNodeRoot: "/api",
userDir: homeDir,
flowFile: flowFilename,
functionGlobalContext: { }, // enables global context
SKIP_BUILD_CHECK: true,
logging: {console: {level:'off'}}
};
RED.init(server, settings);
app.use(settings.httpAdminRoot,RED.httpAdmin);
app.use(settings.httpNodeRoot,RED.httpNode);
server.listen(listenPort, address);
server.on('listening', function() {
var port = server.address().port;
url = 'http://' + address + ':' + port;
});
RED.start().then(function() {
resolve();
});
});
});
browser.url(url);
browser.waitForExist('#palette_node_inject');
} catch (err) {
console.log(err);
throw err;
}
},
stopServer: function(done) {
if (server) {
try {
RED.stop().then(function() {
server.close(done);
cleanup();
done();
try {
// Call this method here because retrieving the caller filename by call stack.
var flowFilename = getFlowFilename();
browser.call(function () {
browser.close(); // need to call this inside browser.call().
return when.promise(function(resolve, reject) {
if (server) {
RED.stop().then(function() {
server.close(function() {
cleanup(flowFilename);
resolve();
});
});
} else {
cleanup(flowFilename);
resolve();
}
});
} catch(e) {
cleanup();
done();
}
});
} catch (err) {
console.log(err);
throw err;
}
},