visreg-test
Version:
A visual regression testing solution that offers an easy setup with simple yet powerful customisation options, wrapped up in a convenient CLI runner to make assessing and accepting/rejecting diffs a breeze.
91 lines (90 loc) • 3.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processImageViaWeb = exports.getSummary = exports.approveOrRejectViaWeb = exports.assessInWeb = void 0;
const utils_1 = require("./utils");
const cli_1 = require("./cli");
const fs = require("fs");
const path = require("path");
const server_1 = require("./server");
const config_1 = require("./server/config");
let diffFilesForWeb = [];
let approvedFiles = [];
let rejectedFiles = [];
let failed;
const assessInWeb = (args) => {
const { files, failed: failedArg } = args;
failed = failedArg;
const diffFiles = files.map((file, index) => {
return (0, exports.processImageViaWeb)(file, index, files.length, cli_1.programChoices.suite);
});
diffFilesForWeb = diffFiles;
(0, server_1.startServer)(cli_1.programChoices, diffFiles);
// We can't open the browser from inside a container
if (cli_1.programChoices === null || cli_1.programChoices === void 0 ? void 0 : cli_1.programChoices.containerized)
return;
Promise.resolve().then(() => require('open')).then((module) => {
const port = process.env.NODE_ENV === 'development' ? config_1.devPort : config_1.serverPort;
module(`http://localhost:${port}/suite/${cli_1.programChoices.suite}/assessment`);
});
};
exports.assessInWeb = assessInWeb;
const approveOrRejectViaWeb = (action, index) => {
const { imageName, files } = diffFilesForWeb[index];
if (action === 'approve') {
approvedFiles.push(imageName);
const { baseline, received, diff } = files;
fs.unlinkSync(path.join((0, utils_1.SUITE_SNAPS_DIR)(), baseline.fileName));
fs.renameSync(path.join((0, utils_1.RECEIVED_DIR)(), received.fileName), path.join((0, utils_1.SUITE_SNAPS_DIR)(), baseline.fileName));
fs.unlinkSync(path.join((0, utils_1.DIFF_DIR)(), diff.fileName));
}
else if (action === 'reject') {
rejectedFiles.push(imageName);
}
};
exports.approveOrRejectViaWeb = approveOrRejectViaWeb;
const getSummary = () => {
(0, utils_1.cleanUp)();
const summary = {
suiteSlug: cli_1.programChoices.suite || '',
approvedFiles,
rejectedFiles,
failed
};
return summary;
};
exports.getSummary = getSummary;
const processImageViaWeb = (diffImageFile, index, total, suiteSlug) => {
cli_1.programChoices.suite = suiteSlug;
const imageName = diffImageFile.replace('.diff.png', '');
const receivedImageFile = imageName + '-received.png';
const baseImageFile = imageName + '.base.png';
const pathToDiffFile = path.join((0, utils_1.DIFF_DIR)(), diffImageFile);
const pathToRecievedFile = path.join((0, utils_1.RECEIVED_DIR)(), receivedImageFile);
const pathToBaselineFile = path.join((0, utils_1.SUITE_SNAPS_DIR)(), baseImageFile);
const recievedSizeString = (0, utils_1.getHumanReadableFileSize)(pathToRecievedFile);
const baselineInfo = (0, utils_1.getFileInfo)(pathToBaselineFile);
const diffObject = {
imageName,
recievedSizeString,
baselineModified: baselineInfo.modifiedAt,
suite: suiteSlug || '',
index,
total,
files: {
baseline: {
location: pathToBaselineFile,
fileName: baseImageFile
},
received: {
location: pathToRecievedFile,
fileName: receivedImageFile
},
diff: {
location: pathToDiffFile,
fileName: diffImageFile
}
}
};
return diffObject;
};
exports.processImageViaWeb = processImageViaWeb;