UNPKG

@dhlab/e2e-autogen

Version:

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

176 lines (174 loc) 7.32 kB
'use strict'; var _CoverageSheet_instances, _CoverageSheet_writeHeader, _CoverageSheet_writeSummary, _CoverageSheet_writeSuites, _CoverageSheet_writeExecHistory, _CoverageSheet_clear, _CoverageSheet_applyHeaderStyle, _CoverageSheet_applyOutlineBorder; Object.defineProperty(exports, "__esModule", { value: true }); exports.CoverageSheet = void 0; const tslib_1 = require("tslib"); const spreadsheet_sheet_1 = require("./spreadsheet-sheet"); class CoverageSheet extends spreadsheet_sheet_1.SpreadsheetSheet { constructor() { super(...arguments); _CoverageSheet_instances.add(this); } async updateCoverage({ summary, summaryPerSuite, summaryPerExecution, }) { const prevRows = await this.rows(); const execHeaderIdx = prevRows.findIndex((r) => r[0] === "실행일시"); const pastExecRows = execHeaderIdx === -1 ? [] : prevRows.slice(execHeaderIdx + 1); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_clear).call(this); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_writeHeader).call(this, summaryPerExecution.executedAt); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_writeSummary).call(this, summary); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_writeSuites).call(this, summaryPerSuite); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_writeExecHistory).call(this, summaryPerExecution, pastExecRows); } } exports.CoverageSheet = CoverageSheet; _CoverageSheet_instances = new WeakSet(), _CoverageSheet_writeHeader = async function _CoverageSheet_writeHeader(lastUpdatedAt) { await this.writeAfterLastRow([ ["자동화테스트 커버리지 현황"], [`마지막 업데이트: ${lastUpdatedAt}`], [""], ["커버리지(%) = 실행된 TC / 전체 TC"], ["통과율(%) = 실행된 TC 중 통과한 TC / 실행된 TC"], ]); }, _CoverageSheet_writeSummary = async function _CoverageSheet_writeSummary({ totalSuites, scenarioCount, testCaseCount, coverage, passRate, }) { const startRow = (await this.rows()).length + 1; const rows = [ [""], ["📝 요약"], ["전체 대분류 수", String(totalSuites)], ["전체 시나리오 수", String(scenarioCount)], ["전체 TC 수", String(testCaseCount)], ["커버리지(%)", String(coverage)], ["통과율(%)", String(passRate)], ]; await this.writeAfterLastRow(rows); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_applyOutlineBorder).call(this, startRow + 2, rows.length - 2, 2); }, _CoverageSheet_writeSuites = async function _CoverageSheet_writeSuites(suites) { if (suites.length === 0) return; const startRow = (await this.rows()).length + 3; const header = [ "대분류", "시나리오 수", "TC 수", "커버리지(%)", "통과율(%)", "Pass", "Fail", "Flaky", "NotExec", "Manual", ]; const rows = suites.map((s) => [ s.suiteId, String(s.scenarioCount), String(s.testCaseCount), String(s.coverage), String(s.passRate), String(s.statusCounts.pass), String(s.statusCounts.fail), String(s.statusCounts.flaky), String(s.statusCounts.not_executed), String(s.statusCounts.manual_only), ]); await this.writeAfterLastRow([[""], ["✅ 대분류별 요약"], header, ...rows]); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_applyHeaderStyle).call(this, startRow, header.length, 1); }, _CoverageSheet_writeExecHistory = async function _CoverageSheet_writeExecHistory({ executedAt, scenarioCount, testCaseCount, coverage, passRate, statusCounts, }, pastExecRows) { const execHeader = [ "실행일시", "시나리오 수", "TC 수", "커버리지(%)", "통과율(%)", "Pass", "Fail", "Flaky", "NotExec", "Manual", ]; const newRow = [ executedAt, String(scenarioCount), String(testCaseCount), String(coverage), String(passRate), String(statusCounts.pass), String(statusCounts.fail), String(statusCounts.flaky), String(statusCounts.not_executed), String(statusCounts.manual_only), ]; const execBlock = [ [""], ["✅ 실행 이력"], execHeader, newRow, ...pastExecRows, ]; const startRow = (await this.rows()).length + 3; await this.writeAfterLastRow(execBlock); await tslib_1.__classPrivateFieldGet(this, _CoverageSheet_instances, "m", _CoverageSheet_applyHeaderStyle).call(this, startRow, execHeader.length, 1); }, _CoverageSheet_clear = async function _CoverageSheet_clear() { const sheetName = await this.sheetName(); await this.sheets.spreadsheets.values.clear({ spreadsheetId: this.spreadsheetId, range: `'${sheetName}'`, }); // 스타일 초기화 await this.sheets.spreadsheets.batchUpdate({ spreadsheetId: this.spreadsheetId, requestBody: { requests: [ { repeatCell: { range: { sheetId: Number(this.gid), }, cell: { userEnteredFormat: {}, }, fields: "userEnteredFormat", }, }, ], }, }); }, _CoverageSheet_applyHeaderStyle = async function _CoverageSheet_applyHeaderStyle(startRow, colCount, rowSpan = 1) { const requests = [ { repeatCell: { range: { sheetId: Number(this.gid), startRowIndex: startRow - 1, endRowIndex: startRow - 1 + rowSpan, startColumnIndex: 0, endColumnIndex: colCount, }, cell: { userEnteredFormat: { textFormat: { bold: true }, backgroundColor: { red: 0.9, green: 0.9, blue: 0.9 }, }, }, fields: "userEnteredFormat(textFormat.bold,backgroundColor)", }, }, ]; await this.applyStyle(requests); }, _CoverageSheet_applyOutlineBorder = async function _CoverageSheet_applyOutlineBorder(startRow, rowCount, colCount) { const req = { updateBorders: { range: { sheetId: Number(this.gid), startRowIndex: startRow - 1, endRowIndex: startRow - 1 + rowCount, startColumnIndex: 0, endColumnIndex: colCount, }, top: { style: "SOLID_THICK" }, bottom: { style: "SOLID_THICK" }, left: { style: "SOLID_THICK" }, right: { style: "SOLID_THICK" }, }, }; await this.applyStyle([req]); };