html-reporter
Version:
Html-reporter and GUI for viewing and managing results of a tests run. Currently supports Testplane and Hermione.
135 lines • 6.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GuiReportBuilder = void 0;
const lodash_1 = __importDefault(require("lodash"));
const static_1 = require("./static");
const gui_1 = require("../tests-tree-builder/gui");
const constants_1 = require("../constants");
const server_utils_1 = require("../server-utils");
const common_utils_1 = require("../common-utils");
const utils_1 = require("../adapters/test-result/utils");
class GuiReportBuilder extends static_1.StaticReportBuilder {
constructor(options) {
super(options);
this._testsTree = gui_1.GuiTestsTreeBuilder.create({ baseHost: this._reporterConfig.baseHost });
this._skips = [];
}
setApiValues(values) {
this._apiValues = values;
return this;
}
reuseTestsTree(tree) {
this._testsTree.reuseTestsTree(tree);
// Fill test attempt manager with data from db
for (const [, testResult] of Object.entries(tree.results.byId)) {
this._testAttemptManager.registerAttempt({
fullName: testResult.suitePath.join(constants_1.DEFAULT_TITLE_DELIMITER),
browserId: testResult.name
}, testResult.status, testResult.attempt);
}
}
getResult() {
const { customGui } = this._reporterConfig;
const config = { ...(0, server_utils_1.getConfigForStaticFile)(this._reporterConfig), customGui };
this._testsTree.sortTree();
const timestamp = Date.now();
return {
tree: this._testsTree.tree,
skips: this._skips,
config,
apiValues: this._apiValues,
timestamp,
// TODO: remove in next major (should use timestamp instead)
date: new Date(timestamp).toString()
};
}
getTestBranch(id) {
return this._testsTree.getTestBranch(id);
}
getTestsDataToUpdateRefs(imageIds) {
return this._testsTree.getTestsDataToUpdateRefs(imageIds);
}
getImageDataToFindEqualDiffs(imageIds) {
return this._testsTree.getImageDataToFindEqualDiffs(imageIds);
}
undoAcceptImage(testResultWithoutAttempt, stateName) {
const attempt = this._testAttemptManager.getCurrentAttempt(testResultWithoutAttempt);
const testResult = (0, utils_1.copyAndUpdate)(testResultWithoutAttempt, { attempt });
const resultId = testResult.id;
const suitePath = testResult.testPath;
const browserName = testResult.browserId;
const resultData = this._testsTree.getResultDataToUnacceptImage(resultId, stateName);
if (!resultData || !(0, common_utils_1.isUpdatedStatus)(resultData.status)) {
return null;
}
const { imageId, status, timestamp, previousImage, shouldRemoveResult } = resultData;
const previousExpectedPath = lodash_1.default.get(previousImage, 'expectedImg.path', null);
const previousImageRefImgSize = lodash_1.default.get(previousImage, 'refImg.size', null);
const shouldRemoveReference = lodash_1.default.isNull(previousImageRefImgSize);
const shouldRevertReference = !shouldRemoveReference;
let updatedImage, removedResult;
if (shouldRemoveResult) {
this._testsTree.removeTestResult(resultId);
this._testAttemptManager.removeAttempt(testResult);
removedResult = testResult;
}
else {
updatedImage = this._testsTree.updateImageInfo(imageId, previousImage);
}
const newResult = (0, utils_1.copyAndUpdate)(testResult, { attempt: this._testAttemptManager.getCurrentAttempt(testResult) });
this._deleteTestResultFromDb({ where: [
`${constants_1.DB_COLUMNS.SUITE_PATH} = ?`,
`${constants_1.DB_COLUMNS.NAME} = ?`,
`${constants_1.DB_COLUMNS.STATUS} = ?`,
`${constants_1.DB_COLUMNS.TIMESTAMP} = ?`,
`json_extract(${constants_1.DB_COLUMNS.IMAGES_INFO}, '$[0].stateName') = ?`
].join(' AND ') }, JSON.stringify(suitePath), browserName, status, timestamp.toString(), stateName);
return { updatedImage, removedResult, previousExpectedPath, shouldRemoveReference, shouldRevertReference, newResult };
}
getUpdatedReferenceTestStatus(testResult) {
const getStateName = (imageInfo) => imageInfo.stateName;
const resultId = testResult.id;
const originalResult = this._testsTree.getTestBranch(resultId);
const omittedImageStates = testResult.imagesInfo.map(getStateName);
const estimatedStatus = (0, common_utils_1.determineStatus)({
status: originalResult.result.status,
error: originalResult.result.error,
imagesInfo: originalResult.images.filter(image => !omittedImageStates.includes(getStateName(image)))
});
return estimatedStatus === constants_1.SUCCESS ? constants_1.UPDATED : estimatedStatus;
}
async addTestResult(formattedResultOriginal, updates) {
const formattedResult = await super.addTestResult(formattedResultOriginal);
if (formattedResult.status === constants_1.SKIPPED) {
const { fullName: suite, skipReason: comment, browserId: browser } = formattedResult;
this._skips.push({ suite, browser, comment });
}
const formattedResultWithImages = this._loadImagesFromPreviousAttempt(formattedResult);
const resultOverrided = updates
? (0, utils_1.copyAndUpdate)(formattedResultWithImages, updates)
: formattedResultWithImages;
this._testsTree.addTestResult(resultOverrided);
return resultOverrided;
}
_loadImagesFromPreviousAttempt(formattedResult) {
if (formattedResult.status !== constants_1.UPDATED) {
return formattedResult;
}
const previousResultId = (0, utils_1.copyAndUpdate)(formattedResult, { attempt: formattedResult.attempt - 1 }).id;
const newImagesInfo = lodash_1.default.clone(this._testsTree.getImagesInfo(previousResultId));
if (newImagesInfo.length) {
formattedResult.imagesInfo?.forEach((imageInfo) => {
const { stateName } = imageInfo;
let index = lodash_1.default.findIndex(newImagesInfo, { stateName });
index = index >= 0 ? index : lodash_1.default.findLastIndex(newImagesInfo);
newImagesInfo[index] = imageInfo;
});
}
return (0, utils_1.copyAndUpdate)(formattedResult, { imagesInfo: newImagesInfo });
}
}
exports.GuiReportBuilder = GuiReportBuilder;
//# sourceMappingURL=gui.js.map