UNPKG

@dhlab/e2e-autogen

Version:

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

68 lines (66 loc) 2.88 kB
'use strict'; var _SocketScenarioBuilder_defaultSpeed; Object.defineProperty(exports, "__esModule", { value: true }); exports.SocketScenarioBuilder = void 0; const tslib_1 = require("tslib"); const types_1 = require("./types"); class SocketScenarioBuilder { constructor({ defaultSpeed } = {}) { _SocketScenarioBuilder_defaultSpeed.set(this, void 0); tslib_1.__classPrivateFieldSet(this, _SocketScenarioBuilder_defaultSpeed, defaultSpeed && defaultSpeed > 0 ? defaultSpeed : 1, "f"); } build(rec, opts) { const speed = opts?.speed && opts.speed > 0 ? opts.speed : tslib_1.__classPrivateFieldGet(this, _SocketScenarioBuilder_defaultSpeed, "f"); const ns = rec.connection.namespace ?? "/"; const startTs = rec.connection.timestamp; const sorted = [...rec.messages].sort((a, b) => a.timestamp - b.timestamp); // 1) 연결 직후 선제 응답 const firstCts = sorted.findIndex((m) => m.direction === "clientToServer"); const onConnectMsgs = (firstCts === -1 ? sorted : sorted.slice(0, firstCts)).filter((m) => m.direction === "serverToClient"); const onConnect = onConnectMsgs.length === 0 ? types_1.TEMPTY_BURST : { responses: onConnectMsgs.map((m) => ({ event: m.event, args: m.data, delayMs: Math.max(0, Math.round((m.timestamp - startTs) / speed)), })), }; // 2) CTS 트리거 구간 묶기 const steps = []; const ctsIdxs = sorted .map((m, i) => ({ m, i })) .filter((x) => x.m.direction === "clientToServer") .map((x) => x.i); for (let k = 0; k < ctsIdxs.length; k++) { const i = ctsIdxs[k]; const j = ctsIdxs[k + 1] ?? sorted.length; const trigger = sorted[i]; const responses = sorted .slice(i + 1, j) .filter((m) => m.direction === "serverToClient") .map((m) => ({ event: m.event, args: m.data, delayMs: Math.max(0, Math.round((m.timestamp - trigger.timestamp) / speed)), })); steps.push({ expect: { event: trigger.event, args: trigger.data }, responses, }); } // 3) 종료/핸드셰이크 const disconnectAfterMs = rec.closedAt && rec.closedAt > startTs ? Math.max(0, Math.round((rec.closedAt - startTs) / speed)) : undefined; return { namespace: ns, onConnect, steps, disconnectAfterMs, handshakeReject: rec.connection.reject, }; } } exports.SocketScenarioBuilder = SocketScenarioBuilder; _SocketScenarioBuilder_defaultSpeed = new WeakMap();