UNPKG

@dhlab/e2e-autogen

Version:

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

64 lines (62 loc) 3.32 kB
'use strict'; var _Scenario_instances, _Scenario_sheet, _Scenario_scenarios, _Scenario_extractedScenarioId; Object.defineProperty(exports, "__esModule", { value: true }); exports.Scenario = void 0; const tslib_1 = require("tslib"); class Scenario { constructor(googleSpreadsheets) { _Scenario_instances.add(this); _Scenario_sheet.set(this, void 0); tslib_1.__classPrivateFieldSet(this, _Scenario_sheet, googleSpreadsheets.testSuiteSheet(""), "f"); } async scenariosPerPrefix(rowsPerPrefix) { const scenariosPerPrefix = new Map(); for (const [prefix, rows] of rowsPerPrefix) { const scenarios = await tslib_1.__classPrivateFieldGet(this, _Scenario_instances, "m", _Scenario_scenarios).call(this, rows); if (scenarios.length === 0) continue; scenariosPerPrefix.set(prefix, scenarios); } console.log(`\n✅ 성공적으로 변환완료`); console.log(`📊 총 ${Array.from(scenariosPerPrefix.values()).reduce((acc, curr) => acc + curr.length, 0)}개의 시나리오가 변환되었습니다.`); return scenariosPerPrefix; } } exports.Scenario = Scenario; _Scenario_sheet = new WeakMap(), _Scenario_instances = new WeakSet(), _Scenario_scenarios = async function _Scenario_scenarios(rows) { if (!rows?.length) return []; // 1. 각 행을 스텝으로 변환하고 scenarioId가 있는 것만 필터링 const steps = rows .map((row) => ({ scenarioId: tslib_1.__classPrivateFieldGet(this, _Scenario_instances, "m", _Scenario_extractedScenarioId).call(this, row), scenarioDescription: row[tslib_1.__classPrivateFieldGet(this, _Scenario_sheet, "f").columnNumberOf("scenarioDescription")] || "", step: { testId: row[tslib_1.__classPrivateFieldGet(this, _Scenario_sheet, "f").columnNumberOf("testId")] || "", uiPath: row[tslib_1.__classPrivateFieldGet(this, _Scenario_sheet, "f").columnNumberOf("uiPath")] || "", action: row[tslib_1.__classPrivateFieldGet(this, _Scenario_sheet, "f").columnNumberOf("action")] || "", expected: row[tslib_1.__classPrivateFieldGet(this, _Scenario_sheet, "f").columnNumberOf("expected")] || "", }, })) .filter((item) => item.scenarioId); // 2. scenarioId 기준으로 그룹화 const groupedByScenarioId = new Map(); for (const item of steps) { const existing = groupedByScenarioId.get(item.scenarioId) || []; groupedByScenarioId.set(item.scenarioId, [...existing, item]); } // 3. 그룹화된 데이터를 TScenarioData[] 형태로 변환 return Array.from(groupedByScenarioId.entries()).map(([scenarioId, items]) => ({ scenarioId, // 첫 번째 항목의 설명을 시나리오 설명으로 사용 scenarioDescription: items[0].scenarioDescription, // 모든 항목의 스텝을 배열로 steps: items.map((item) => item.step), })); }, _Scenario_extractedScenarioId = function _Scenario_extractedScenarioId(row) { const testId = row[tslib_1.__classPrivateFieldGet(this, _Scenario_sheet, "f").columnNumberOf("testId")] || ""; if (!testId) return ""; // TC-x.x.x → TC-x.x return testId.split(".").slice(0, -1).join("."); };