package com.gzzn.omms.msgexchange.processing import com.gzzn.omms.msgexchange.infra.persistence.MsgEventRepository import com.gzzn.omms.msgexchange.infra.persistence.PipelineLockRepository import com.gzzn.omms.msgexchange.infra.persistence.PipelineTransactionManager import com.gzzn.omms.msgexchange.infra.persistence.ProcStateRepository import com.gzzn.omms.msgexchange.infra.stub.StubFlightProjectionPort import com.gzzn.omms.msgexchange.infra.stub.StubMsgEvents import com.gzzn.omms.msgexchange.infra.stub.StubPipelineLock import com.gzzn.omms.msgexchange.infra.stub.StubPipelineTx import com.gzzn.omms.msgexchange.codec.JacksonXmlCodec import com.gzzn.omms.msgexchange.config.OperationDayProps import com.gzzn.omms.msgexchange.config.PipelineProps import com.gzzn.omms.msgexchange.infra.persistence.RefDataRepository import com.gzzn.omms.msgexchange.infra.stub.StubCoutmsgOutbox import com.gzzn.omms.msgexchange.infra.stub.StubProcState import com.gzzn.omms.msgexchange.infra.stub.StubRefDataRepository import com.gzzn.omms.msgexchange.infra.stub.StubReqTrack import java.time.Clock /** * 处理器用例共用的三步提交装配:默认全内存、投影不失败。 * 事件仓储要和处理器用同一个实例,否则放行(`HELD` → `PENDING`)落不到处理器写的那些行上。 */ internal fun testCommit( procState: ProcStateRepository = StubProcState(), msgEvents: MsgEventRepository = StubMsgEvents(), projection: FlightProjectionPort = StubFlightProjectionPort(), lock: PipelineLockRepository = StubPipelineLock(), txManager: PipelineTransactionManager = StubPipelineTx(), clock: Clock = Clock.systemUTC(), ) = FlightCommit(txManager, lock, procState, msgEvents, projection, clock) internal fun testRefDataProcessor( procState: ProcStateRepository = StubProcState(), refData: RefDataRepository = StubRefDataRepository(), clock: Clock = Clock.systemUTC(), ): ReferenceDataProcessor { val refCommit = RefDataCommit( StubPipelineTx(), StubPipelineLock(), procState, clock, ) val props = PipelineProps() val opDay = OperationDayProps().apply { zone = "Asia/Shanghai"; cutoffHour = 0 } val outbound = OutboundRequestService( StubReqTrack(clock), StubCoutmsgOutbox(), JacksonXmlCodec(), props, opDay, clock, ) return ReferenceDataProcessor(refCommit, refData, outbound) }