UNPKG

@applitools/eyes-playwright

Version:
74 lines (73 loc) 3.96 kB
"use strict"; 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;