UNPKG

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
"use strict"; 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;