@dhlab/e2e-autogen
Version:
Google 스프레드시트 기반 시나리오를 Playwright 테스트 스텁 코드로 자동 생성하고, 테스트 실행 결과를 다시 시트에 업데이트하는 CLI 도구
64 lines (62 loc) • 3.32 kB
JavaScript
;
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(".");
};