@dhlab/e2e-autogen
Version:
Google 스프레드시트 기반 시나리오를 Playwright 테스트 스텁 코드로 자동 생성하고, 테스트 실행 결과를 다시 시트에 업데이트하는 CLI 도구
131 lines (130 loc) • 7.82 kB
JavaScript
var _TestCoverage_instances, _TestCoverage_resultsPerSuite, _TestCoverage_summary, _TestCoverage_summaryPerSuite, _TestCoverage_summaryPerExecution, _TestCoverage_calculateSuiteStats, _TestCoverage_calculateCoverage, _TestCoverage_calculatePassRate, _TestCoverage_isExecuted, _TestCoverage_isSuccess, _TestCoverage_round, _TestCoverage_scenarioIdOf, _TestCoverage_lastUpdatedAt, _TestCoverage_emptyStatusCount, _TestCoverage_mergeStatusCounts;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestCoverage = void 0;
const tslib_1 = require("tslib");
class TestCoverage {
constructor(resultsPerSuite) {
_TestCoverage_instances.add(this);
_TestCoverage_resultsPerSuite.set(this, void 0);
tslib_1.__classPrivateFieldSet(this, _TestCoverage_resultsPerSuite, resultsPerSuite, "f");
}
async update(googleSpreadsheets) {
const coverageSheet = await googleSpreadsheets.coverageSheet();
await coverageSheet.updateCoverage(this.results());
}
results() {
const summary = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_summary).call(this);
const summaryPerSuite = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_summaryPerSuite).call(this);
const summaryPerExecution = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_summaryPerExecution).call(this);
return { summary, summaryPerSuite, summaryPerExecution };
}
}
exports.TestCoverage = TestCoverage;
_TestCoverage_resultsPerSuite = new WeakMap(), _TestCoverage_instances = new WeakSet(), _TestCoverage_summary = function _TestCoverage_summary() {
const aggregated = Array.from(tslib_1.__classPrivateFieldGet(this, _TestCoverage_resultsPerSuite, "f").values()).reduce((acc, caseMap) => {
const suiteStats = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_calculateSuiteStats).call(this, caseMap);
acc.scenarioCount += suiteStats.scenarioCount;
acc.testCaseCount += suiteStats.testCaseCount;
acc.executedCount += suiteStats.executedCount;
acc.passCount += suiteStats.passCount;
tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_mergeStatusCounts).call(this, acc.statusCounts, suiteStats.statusCounts);
return acc;
}, {
scenarioCount: 0,
testCaseCount: 0,
executedCount: 0,
passCount: 0,
statusCounts: tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_emptyStatusCount).call(this),
});
return {
totalSuites: tslib_1.__classPrivateFieldGet(this, _TestCoverage_resultsPerSuite, "f").size,
scenarioCount: aggregated.scenarioCount,
testCaseCount: aggregated.testCaseCount,
coverage: tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_calculateCoverage).call(this, aggregated.executedCount, aggregated.testCaseCount),
passRate: tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_calculatePassRate).call(this, aggregated.passCount, aggregated.executedCount),
statusCounts: aggregated.statusCounts,
};
}, _TestCoverage_summaryPerSuite = function _TestCoverage_summaryPerSuite() {
return Array.from(tslib_1.__classPrivateFieldGet(this, _TestCoverage_resultsPerSuite, "f")).map(([suiteId, caseMap]) => {
const stats = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_calculateSuiteStats).call(this, caseMap);
return {
suiteId,
scenarioCount: stats.scenarioCount,
testCaseCount: stats.testCaseCount,
coverage: tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_calculateCoverage).call(this, stats.executedCount, stats.testCaseCount),
passRate: tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_calculatePassRate).call(this, stats.passCount, stats.executedCount),
statusCounts: stats.statusCounts,
};
});
}, _TestCoverage_summaryPerExecution = function _TestCoverage_summaryPerExecution() {
const summary = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_summary).call(this);
return {
executedAt: tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_lastUpdatedAt).call(this),
scenarioCount: summary.scenarioCount,
testCaseCount: summary.testCaseCount,
coverage: summary.coverage,
passRate: summary.passRate,
statusCounts: summary.statusCounts,
};
}, _TestCoverage_calculateSuiteStats = function _TestCoverage_calculateSuiteStats(caseMap) {
const scenarios = new Set();
let executedCount = 0;
let passCount = 0;
const statusCounts = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_emptyStatusCount).call(this);
for (const [testCaseId, result] of caseMap) {
const status = result.status;
const scenarioId = tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_scenarioIdOf).call(this, testCaseId);
scenarios.add(scenarioId);
statusCounts[status]++;
if (tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_isExecuted).call(this, status)) {
executedCount++;
if (tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_isSuccess).call(this, status)) {
passCount++;
}
}
}
return {
scenarioCount: scenarios.size,
testCaseCount: caseMap.size,
executedCount,
passCount,
statusCounts,
};
}, _TestCoverage_calculateCoverage = function _TestCoverage_calculateCoverage(executedCount, totalCount) {
if (totalCount === 0)
return 0;
return tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_round).call(this, (executedCount / totalCount) * 100);
}, _TestCoverage_calculatePassRate = function _TestCoverage_calculatePassRate(passCount, executedCount) {
if (executedCount === 0)
return 0;
return tslib_1.__classPrivateFieldGet(this, _TestCoverage_instances, "m", _TestCoverage_round).call(this, (passCount / executedCount) * 100);
}, _TestCoverage_isExecuted = function _TestCoverage_isExecuted(status) {
return status !== "not_executed" && status !== "manual_only";
}, _TestCoverage_isSuccess = function _TestCoverage_isSuccess(status) {
return status === "pass" || status === "flaky";
}, _TestCoverage_round = function _TestCoverage_round(value) {
return Math.round(value * 100) / 100;
}, _TestCoverage_scenarioIdOf = function _TestCoverage_scenarioIdOf(testCaseId) {
const parts = testCaseId.split(".");
return parts.length > 2 ? parts.slice(0, -1).join(".") : testCaseId;
}, _TestCoverage_lastUpdatedAt = function _TestCoverage_lastUpdatedAt() {
const date = new Date();
const yyyy = date.getFullYear();
const mm = String(date.getMonth() + 1).padStart(2, "0");
const dd = String(date.getDate()).padStart(2, "0");
const hh = String(date.getHours()).padStart(2, "0");
const mi = String(date.getMinutes()).padStart(2, "0");
return `${yyyy}${mm}${dd}:${hh}:${mi}`;
}, _TestCoverage_emptyStatusCount = function _TestCoverage_emptyStatusCount() {
return {
pass: 0,
fail: 0,
flaky: 0,
not_executed: 0,
manual_only: 0,
};
}, _TestCoverage_mergeStatusCounts = function _TestCoverage_mergeStatusCounts(target, source) {
Object.keys(source).forEach((status) => {
target[status] += source[status];
});
};