UNPKG

@dhlab/e2e-autogen

Version:

Google 스프레드시트 기반 시나리오를 Playwright 테스트 스텁 코드로 자동 생성하고, 테스트 실행 결과를 다시 시트에 업데이트하는 CLI 도구

131 lines (130 loc) 7.82 kB
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]; }); };