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.

148 lines (147 loc) 5.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const visreg_1 = require("../../../visreg"); const diff_assessment_web_1 = require("../../../diff-assessment-web"); const utils_1 = require("../../../utils"); const fs = require("fs"); const path = require("path"); const get_suite_image_directories_1 = require("../../services/get-suite-image-directories"); const express = require('express'); const router = express.Router(); const summary = { suiteSlug: '', approvedFiles: [], rejectedFiles: [], failed: false, }; let temporaryAssessmentResults = []; router.post('/approve-instantly', (req, res) => __awaiter(void 0, void 0, void 0, function* () { const { suiteSlug, fileName } = req.body; const diffImage = (0, diff_assessment_web_1.processImageViaWeb)(fileName, 0, 1, suiteSlug); try { approveImage(diffImage, req.local.suitesDirectory); res.send({ success: true }); } catch (error) { console.error('Error approving instantly: ', error); res.send({ error: 'Error approving instantly' }); } })); router.post('/approve', (req, res) => { const diffImage = req.body.diffImage; try { const assessedImage = Object.assign(Object.assign({}, diffImage), { assessedAs: 'approved' }); temporaryAssessmentResults[assessedImage.index] = assessedImage; res.send(temporaryAssessmentResults); } catch (error) { console.error('Error temporarily approving file: ', error); res.send({ error: 'Error temporarily approving file' }); } }); router.post('/reject', (req, res) => { const diffImage = req.body.diffImage; try { const assessedImage = Object.assign(Object.assign({}, diffImage), { assessedAs: 'rejected' }); temporaryAssessmentResults[assessedImage.index] = assessedImage; res.send(temporaryAssessmentResults); } catch (error) { console.error('Error temporarily rejecting file: ', error); res.send({ error: 'Error temporarily rejecting file' }); } }); const resetSummary = () => { summary.suiteSlug = ''; summary.approvedFiles = []; summary.rejectedFiles = []; summary.failed = false; temporaryAssessmentResults = []; }; router.post('/diffs-data', (req, res) => { const { suiteSlug, diffListSubset, resume } = req.body; const suiteSlugToUse = suiteSlug || req.local.programChoices.suite; if (!resume) { resetSummary(); } if (!suiteSlug) { return res.send({ error: 'No suite slug provided' }); } summary.suiteSlug = suiteSlugToUse; try { let diffs = []; if (diffListSubset) { diffs = diffListSubset.map((file, index) => { return (0, diff_assessment_web_1.processImageViaWeb)(file, index, diffListSubset.length, suiteSlug); }); } else { diffs = (0, visreg_1.getDiffsForWeb)(suiteSlug); } res.send({ suiteSlug: suiteSlug, diffFiles: diffs, temporaryAssessmentResults, }); } catch (error) { console.error('Error getting diff files: ', error); res.send({ error: 'Error getting diff files' }); } }); const finalizeAssessment = (suitesDirectory) => __awaiter(void 0, void 0, void 0, function* () { return new Promise((resolve) => { temporaryAssessmentResults .filter((diffImage) => diffImage.assessedAs === 'rejected') .forEach((diffImage) => { const { imageName } = diffImage; summary.rejectedFiles.push(imageName); }); temporaryAssessmentResults .filter((diffImage) => diffImage.assessedAs === 'approved') .forEach((diffImage) => { approveImage(diffImage, suitesDirectory); }); resolve(); }); }); const approveImage = (diffImage, suitesDirectory) => { try { const { imageName, files, suite } = diffImage; const { baseline, received, diff } = files; const { baselines, diffs, receivedImages } = (0, get_suite_image_directories_1.getSuiteImageDirectories)(suite, suitesDirectory); fs.unlinkSync(path.join(baselines, baseline.fileName)); fs.renameSync(path.join(receivedImages, received.fileName), path.join(baselines, baseline.fileName)); fs.unlinkSync(path.join(diffs, diff.fileName)); summary.approvedFiles.push(imageName); } catch (error) { console.error('Error approving file: ', error); } }; router.get('/summary', (req, res) => __awaiter(void 0, void 0, void 0, function* () { try { yield finalizeAssessment(req.local.suitesDirectory); (0, utils_1.cleanUp)(); const summaryCopy = Object.assign({}, summary); summary.suiteSlug = ''; summary.approvedFiles = []; summary.rejectedFiles = []; summary.failed = false; res.send(summaryCopy); } catch (error) { console.error('Error getting summary: ', error); res.send({ error: 'Error getting summary' }); } })); exports.default = router;