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
JavaScript
;
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;