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