@applitools/eyes-playwright
Version:
Applitools Eyes SDK for Playwright
74 lines (73 loc) • 3.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateAllPlaywrightTestStatuses = exports.updatePlaywrightTestStatus = exports.getRunStatusFromEyesStatuses = exports.getOutcomeFromEyesStatuses = void 0;
const statusUtils_js_1 = require("./statusUtils.js");
function getOutcomeFromEyesStatuses(eyesStatuses, testOutcome) {
return eyesStatuses.every(status => status === 'unresolved' || status === 'failed')
? 'unexpected'
: eyesStatuses.some(status => status === 'unresolved' || status === 'failed')
? 'flaky'
: testOutcome;
}
exports.getOutcomeFromEyesStatuses = getOutcomeFromEyesStatuses;
function getRunStatusFromEyesStatuses(eyesStatus, runStatus) {
return eyesStatus === 'unresolved' || eyesStatus === 'failed' ? 'failed' : runStatus;
}
exports.getRunStatusFromEyesStatuses = getRunStatusFromEyesStatuses;
function updatePlaywrightTestStatus(test, fileInReport, reportStats, eyesStatuses, updateOriginalOutcome = false) {
var _a, _b;
if (eyesStatuses.filter(status => status !== null).length > 0 &&
// test outcome: 'skipped' | 'expected' | 'unexpected' | 'flaky'
['expected', 'flaky'].includes((_a = test.originalOutcome) !== null && _a !== void 0 ? _a : test.outcome)) {
test.results.forEach((_result, index) => {
var _a, _b;
const eyesStatus = eyesStatuses[index];
// run status: 'passed' | 'failed' | 'timedOut' | 'skipped' | 'interrupted'
if (((_a = _result.originalStatus) !== null && _a !== void 0 ? _a : _result.status) === 'passed' && eyesStatus !== null) {
if (updateOriginalOutcome)
_result.originalStatus = _result.status;
_result.status = getRunStatusFromEyesStatuses(eyesStatus, (_b = _result.originalStatus) !== null && _b !== void 0 ? _b : _result.status);
}
});
const testInReport = fileInReport.tests.find(t => t.testId === test.testId);
if (!testInReport)
return;
if (updateOriginalOutcome) {
testInReport.originalOutcome = test.originalOutcome = test.outcome;
}
const newOutcome = getOutcomeFromEyesStatuses(eyesStatuses.filter((status) => status !== null), (_b = test.originalOutcome) !== null && _b !== void 0 ? _b : test.outcome);
if (testInReport.outcome !== newOutcome) {
reportStats[testInReport.outcome]--;
reportStats[newOutcome]++;
}
testInReport.outcome = test.outcome = newOutcome;
}
}
exports.updatePlaywrightTestStatus = updatePlaywrightTestStatus;
function updateAllPlaywrightTestStatuses(testResults) {
Object.values(testResults.testsFiles).forEach(testFile => {
const fileInReport = testResults.report.files.find(file => file.fileId === testFile.fileId);
const reportStats = testResults.report.stats;
testFile.tests.forEach(test => {
var _a;
const eyesResultsForTest = (_a = testResults.eyesTestResult[test.testId]) === null || _a === void 0 ? void 0 : _a.eyesResults;
if (!eyesResultsForTest)
return;
if (!fileInReport)
return;
// Get Eyes status for each retry
const eyesStatuses = test.results.reduce((results, _result) => {
const eyesResultsForRun = eyesResultsForTest.filter(result => result.playwrightRetry === _result.retry);
if (eyesResultsForRun.length > 0) {
results.push((0, statusUtils_js_1.getStatus)(eyesResultsForRun).status);
}
else {
results.push(null);
}
return results;
}, []);
updatePlaywrightTestStatus(test, fileInReport, reportStats, eyesStatuses);
});
});
}
exports.updateAllPlaywrightTestStatuses = updateAllPlaywrightTestStatuses;