UNPKG

creevey

Version:

creevey is a tool for automated visual testing, that tightly integrated with storybook

95 lines (75 loc) 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = master; var _path = _interopRequireDefault(require("path")); var _cluster = _interopRequireDefault(require("cluster")); var _fs = require("fs"); var _util = require("util"); var _types = require("../../types"); var _stories = require("../../stories"); var _runner = _interopRequireDefault(require("./runner")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const copyFileAsync = (0, _util.promisify)(_fs.copyFile); const readdirAsync = (0, _util.promisify)(_fs.readdir); const mkdirAsync = (0, _util.promisify)(_fs.mkdir); function reportDataModule(data) { return ` (function (root, factory) { if (typeof module === 'object' && module.exports) { module.exports = factory(); } else { root.__CREEVEY_DATA__ = factory(); } }(this, function () { return ${JSON.stringify(data)} })); `; } function mergeTests(testsWithReports, testsFromStories) { Object.values(testsFromStories).filter(_types.isDefined).forEach(test => { const testWithReport = testsWithReports[test.id]; if (!testWithReport) return; test.retries = testWithReport.retries; if (testWithReport.status == 'success' || testWithReport.status == 'failed') test.status = testWithReport.status; test.results = testWithReport.results; test.approved = testWithReport.approved; }); return testsFromStories; } async function copyStatics(reportDir) { const clientDir = _path.default.join(__dirname, '../../client'); const files = (await readdirAsync(clientDir, { withFileTypes: true })).filter(dirent => dirent.isFile() && !dirent.name.endsWith('.d.ts')).map(dirent => dirent.name); await mkdirAsync(reportDir, { recursive: true }); for (const file of files) { await copyFileAsync(_path.default.join(clientDir, file), _path.default.join(reportDir, file)); } } async function master(config) { const runner = new _runner.default(config, {}); const reportDataPath = _path.default.join(config.reportDir, 'data.js'); let testsFromReport = {}; try { testsFromReport = require(reportDataPath); } catch (error) {// Ignore error } const tests = await (0, _stories.loadTestsFromStories)(config, Object.keys(config.browsers), testsDiff => runner.updateTests(testsDiff)); runner.updateTests(mergeTests(testsFromReport, tests)); await runner.init(); await copyStatics(config.reportDir); process.on('SIGINT', () => { if (runner.isRunning) { // TODO Better handle stop Promise.race([new Promise(resolve => setTimeout(resolve, 10000)), new Promise(resolve => runner.once('stop', resolve))]).then(() => _cluster.default.disconnect(() => process.exit(0))); runner.stop(); } else { _cluster.default.disconnect(() => process.exit(0)); } }); process.on('exit', () => (0, _fs.writeFileSync)(reportDataPath, reportDataModule(runner.status.tests))); return runner; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvbWFzdGVyL21hc3Rlci50cyJdLCJuYW1lcyI6WyJjb3B5RmlsZUFzeW5jIiwiY29weUZpbGUiLCJyZWFkZGlyQXN5bmMiLCJyZWFkZGlyIiwibWtkaXJBc3luYyIsIm1rZGlyIiwicmVwb3J0RGF0YU1vZHVsZSIsImRhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwibWVyZ2VUZXN0cyIsInRlc3RzV2l0aFJlcG9ydHMiLCJ0ZXN0c0Zyb21TdG9yaWVzIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiaXNEZWZpbmVkIiwiZm9yRWFjaCIsInRlc3QiLCJ0ZXN0V2l0aFJlcG9ydCIsImlkIiwicmV0cmllcyIsInN0YXR1cyIsInJlc3VsdHMiLCJhcHByb3ZlZCIsImNvcHlTdGF0aWNzIiwicmVwb3J0RGlyIiwiY2xpZW50RGlyIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJmaWxlcyIsIndpdGhGaWxlVHlwZXMiLCJkaXJlbnQiLCJpc0ZpbGUiLCJuYW1lIiwiZW5kc1dpdGgiLCJtYXAiLCJyZWN1cnNpdmUiLCJmaWxlIiwibWFzdGVyIiwiY29uZmlnIiwicnVubmVyIiwiUnVubmVyIiwicmVwb3J0RGF0YVBhdGgiLCJ0ZXN0c0Zyb21SZXBvcnQiLCJyZXF1aXJlIiwiZXJyb3IiLCJ0ZXN0cyIsImtleXMiLCJicm93c2VycyIsInRlc3RzRGlmZiIsInVwZGF0ZVRlc3RzIiwiaW5pdCIsInByb2Nlc3MiLCJvbiIsImlzUnVubmluZyIsIlByb21pc2UiLCJyYWNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJvbmNlIiwidGhlbiIsImNsdXN0ZXIiLCJkaXNjb25uZWN0IiwiZXhpdCIsInN0b3AiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLGFBQWEsR0FBRyxxQkFBVUMsWUFBVixDQUF0QjtBQUNBLE1BQU1DLFlBQVksR0FBRyxx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LENBQTdCO0FBRUEsUUFBTU4sTUFBTSxDQUFDVyxJQUFQLEVBQU47QUFDQSxRQUFNNUIsV0FBVyxDQUFDZ0IsTUFBTSxDQUFDZixTQUFSLENBQWpCO0FBRUE0QixFQUFBQSxPQUFPLENBQUNDLEVBQVIsQ0FBVyxRQUFYLEVBQXFCLE1BQU07QUFDekIsUUFBSWIsTUFBTSxDQUFDYyxTQUFYLEVBQXNCO0FBQ3BCO0FBQ0FDLE1BQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQ1gsSUFBSUQsT0FBSixDQUFhRSxPQUFELElBQWFDLFVBQVUsQ0FBQ0QsT0FBRCxFQUFVLEtBQVYsQ0FBbkMsQ0FEVyxFQUVYLElBQUlGLE9BQUosQ0FBYUUsT0FBRCxJQUFhakIsTUFBTSxDQUFDbUIsSUFBUCxDQUFZLE1BQVosRUFBb0JGLE9BQXBCLENBQXpCLENBRlcsQ0FBYixFQUdHRyxJQUhILENBR1EsTUFBTUMsaUJBQVFDLFVBQVIsQ0FBbUIsTUFBTVYsT0FBTyxDQUFDVyxJQUFSLENBQWEsQ0FBYixDQUF6QixDQUhkO0FBSUF2QixNQUFBQSxNQUFNLENBQUN3QixJQUFQO0FBQ0QsS0FQRCxNQU9PO0FBQ0xILHVCQUFRQyxVQUFSLENBQW1CLE1BQU1WLE9BQU8sQ0FBQ1csSUFBUixDQUFhLENBQWIsQ0FBekI7QUFDRDtBQUNGLEdBWEQ7QUFZQVgsRUFBQUEsT0FBTyxDQUFDQyxFQUFSLENBQVcsTUFBWCxFQUFtQixNQUFNLHVCQUFjWCxjQUFkLEVBQThCdEMsZ0JBQWdCLENBQUNvQyxNQUFNLENBQUNwQixNQUFQLENBQWMwQixLQUFmLENBQTlDLENBQXpCO0FBRUEsU0FBT04sTUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY2x1c3RlciBmcm9tICdjbHVzdGVyJztcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMsIGNvcHlGaWxlLCByZWFkZGlyLCBta2RpciB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgQ29uZmlnLCBUZXN0LCBpc0RlZmluZWQsIFNlcnZlclRlc3QgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBsb2FkVGVzdHNGcm9tU3RvcmllcyB9IGZyb20gJy4uLy4uL3N0b3JpZXMnO1xuaW1wb3J0IFJ1bm5lciBmcm9tICcuL3J1bm5lcic7XG5cbmNvbnN0IGNvcHlGaWxlQXN5bmMgPSBwcm9taXNpZnkoY29weUZpbGUpO1xuY29uc3QgcmVhZGRpckFzeW5jID0gcHJvbWlzaWZ5KHJlYWRkaXIpO1xuY29uc3QgbWtkaXJBc3luYyA9IHByb21pc2lmeShta2Rpcik7XG5cbmZ1bmN0aW9uIHJlcG9ydERhdGFNb2R1bGU8VD4oZGF0YTogVCk6IHN0cmluZyB7XG4gIHJldHVybiBgXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fX0NSRUVWRVlfREFUQV9fID0gZmFjdG9yeSgpO1xuICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHsgcmV0dXJuICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9IH0pKTtcbmA7XG59XG5cbmZ1bmN0aW9uIG1lcmdlVGVzdHMoXG4gIHRlc3RzV2l0aFJlcG9ydHM6IFBhcnRpYWw8eyBbaWQ6IHN0cmluZ106IFRlc3QgfT4sXG4gIHRlc3RzRnJvbVN0b3JpZXM6IFBhcnRpYWw8eyBbaWQ6IHN0cmluZ106IFNlcnZlclRlc3QgfT4sXG4pOiBQYXJ0aWFsPHsgW2lkOiBzdHJpbmddOiBTZXJ2ZXJUZXN0IH0+IHtcbiAgT2JqZWN0LnZhbHVlcyh0ZXN0c0Zyb21TdG9yaWVzKVxuICAgIC5maWx0ZXIoaXNEZWZpbmVkKVxuICAgIC5mb3JFYWNoKCh0ZXN0KSA9PiB7XG4gICAgICBjb25zdCB0ZXN0V2l0aFJlcG9ydCA9IHRlc3RzV2l0aFJlcG9ydHNbdGVzdC5pZF07XG4gICAgICBpZiAoIXRlc3RXaXRoUmVwb3J0KSByZXR1cm47XG4gICAgICB0ZXN0LnJldHJpZXMgPSB0ZXN0V2l0aFJlcG9ydC5yZXRyaWVzO1xuICAgICAgaWYgKHRlc3RXaXRoUmVwb3J0LnN0YXR1cyA9PSAnc3VjY2VzcycgfHwgdGVzdFdpdGhSZXBvcnQuc3RhdHVzID09ICdmYWlsZWQnKSB0ZXN0LnN0YXR1cyA9IHRlc3RXaXRoUmVwb3J0LnN0YXR1cztcbiAgICAgIHRlc3QucmVzdWx0cyA9IHRlc3RXaXRoUmVwb3J0LnJlc3VsdHM7XG4gICAgICB0ZXN0LmFwcHJvdmVkID0gdGVzdFdpdGhSZXBvcnQuYXBwcm92ZWQ7XG4gICAgfSk7XG4gIHJldHVybiB0ZXN0c0Zyb21TdG9yaWVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5U3RhdGljcyhyZXBvcnREaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjbGllbnREaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vY2xpZW50Jyk7XG4gIGNvbnN0IGZpbGVzID0gKGF3YWl0IHJlYWRkaXJBc3luYyhjbGllbnREaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSlcbiAgICAuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0ZpbGUoKSAmJiAhZGlyZW50Lm5hbWUuZW5kc1dpdGgoJy5kLnRzJykpXG4gICAgLm1hcCgoZGlyZW50KSA9PiBkaXJlbnQubmFtZSk7XG4gIGF3YWl0IG1rZGlyQXN5bmMocmVwb3J0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgYXdhaXQgY29weUZpbGVBc3luYyhwYXRoLmpvaW4oY2xpZW50RGlyLCBmaWxlKSwgcGF0aC5qb2luKHJlcG9ydERpciwgZmlsZSkpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIG1hc3Rlcihjb25maWc6IENvbmZpZyk6IFByb21pc2U8UnVubmVyPiB7XG4gIGNvbnN0IHJ1bm5lciA9IG5ldyBSdW5uZXIoY29uZmlnLCB7fSk7XG4gIGNvbnN0IHJlcG9ydERhdGFQYXRoID0gcGF0aC5qb2luKGNvbmZpZy5yZXBvcnREaXIsICdkYXRhLmpzJyk7XG4gIGxldCB0ZXN0c0Zyb21SZXBvcnQgPSB7fTtcbiAgdHJ5IHtcbiAgICB0ZXN0c0Zyb21SZXBvcnQgPSByZXF1aXJlKHJlcG9ydERhdGFQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JcbiAgfVxuICBjb25zdCB0ZXN0cyA9IGF3YWl0IGxvYWRUZXN0c0Zyb21TdG9yaWVzKGNvbmZpZywgT2JqZWN0LmtleXMoY29uZmlnLmJyb3dzZXJzKSwgKHRlc3RzRGlmZikgPT5cbiAgICBydW5uZXIudXBkYXRlVGVzdHModGVzdHNEaWZmKSxcbiAgKTtcblxuICBydW5uZXIudXBkYXRlVGVzdHMobWVyZ2VUZXN0cyh0ZXN0c0Zyb21SZXBvcnQsIHRlc3RzKSk7XG5cbiAgYXdhaXQgcnVubmVyLmluaXQoKTtcbiAgYXdhaXQgY29weVN0YXRpY3MoY29uZmlnLnJlcG9ydERpcik7XG5cbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGlmIChydW5uZXIuaXNSdW5uaW5nKSB7XG4gICAgICAvLyBUT0RPIEJldHRlciBoYW5kbGUgc3RvcFxuICAgICAgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMDApKSxcbiAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJ1bm5lci5vbmNlKCdzdG9wJywgcmVzb2x2ZSkpLFxuICAgICAgXSkudGhlbigoKSA9PiBjbHVzdGVyLmRpc2Nvbm5lY3QoKCkgPT4gcHJvY2Vzcy5leGl0KDApKSk7XG4gICAgICBydW5uZXIuc3RvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbHVzdGVyLmRpc2Nvbm5lY3QoKCkgPT4gcHJvY2Vzcy5leGl0KDApKTtcbiAgICB9XG4gIH0pO1xuICBwcm9jZXNzLm9uKCdleGl0JywgKCkgPT4gd3JpdGVGaWxlU3luYyhyZXBvcnREYXRhUGF0aCwgcmVwb3J0RGF0YU1vZHVsZShydW5uZXIuc3RhdHVzLnRlc3RzKSkpO1xuXG4gIHJldHVybiBydW5uZXI7XG59XG4iXX0=