Files
msgexchange-v2/src/test/kotlin/com/gzzn/omms/msgexchange/processing/TestFlightCommit.kt
T

52 lines
2.3 KiB
Kotlin
Raw Normal View History

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)
}