gpii-testem
Version:
A library to assist in using Testem within the Fluid ecosystem.
80 lines (64 loc) • 2.92 kB
JavaScript
/* eslint-env node */
;
var fluid = require("infusion");
var gpii = fluid.registerNamespace("gpii");
require("gpii-express");
//fluid.require("%gpii-express");
var fs = require("fs");
var path = require("path");
var mkdirp = require("mkdirp");
fluid.registerNamespace("gpii.testem.coverage.receiver");
// Adapted from `fluid.match`: https://github.com/fluid-project/infusion/blob/16a963d63dce313ab3f2e3a81c725c2cbef0af79/src/framework/core/js/FluidDocument.js#L31
// (We can't use it directly because the rest of that file is designed to work only in a browser).
gpii.testem.coverage.receiver.uaMatch = function (ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
/(msie) ([\w.]+)/.exec( ua ) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || [];
return {
name: match[ 1 ] || "unknown",
version: match[ 2 ] || "0"
};
};
gpii.testem.coverage.receiver.initMiddleware = function (that) {
if (that.options.coverageDir) {
var resolvedCoverageDir = fluid.module.resolvePath(that.options.coverageDir);
mkdirp(resolvedCoverageDir);
}
};
gpii.testem.coverage.receiver.middlewareImpl = function (that, request, response) {
var resolvedCoverageDir = fluid.module.resolvePath(that.options.coverageDir);
var coveragePayload = request.body.payload;
var browser = gpii.testem.coverage.receiver.uaMatch(fluid.get(coveragePayload, "navigator.userAgent"));
var testPath = fluid.get(coveragePayload.document, "URL");
var testFilename = testPath ? testPath.split("/").pop() : "unknown";
var coverageFilename = ["coverage", "-", browser.name, "-", browser.version, "-", testFilename, "-", that.id, "-", Math.round(Math.random() * 10000), ".json"].join("");
var coverageOutputPath = path.join(resolvedCoverageDir, coverageFilename);
fs.writeFile(coverageOutputPath, JSON.stringify(coveragePayload.coverage, null, 2), { encoding: "utf8"}, function (error) {
if (error) {
response.status(500).send({ isError: true, message: error});
}
else {
response.status(200).send({ message: "You have successfully saved your coverage report."});
}
});
};
fluid.defaults("gpii.testem.coverage.receiver.middleware", {
gradeNames: ["gpii.express.middleware"],
path: "/",
method: ["put", "post"],
invokers: {
middleware: {
funcName: "gpii.testem.coverage.receiver.middlewareImpl",
args: ["{that}", "{arguments}.0", "{arguments}.1", "{arguments}.2"]
}
},
listeners: {
"onCreate.init": {
funcName: "gpii.testem.coverage.receiver.initMiddleware",
args: ["{that}"]
}
}
});