7936251d6b
P2-1: Guard SessionId NPE with safe-call in SessionsReducer
P2-2: Remove 16 dead event classes + reducer branches; replace with live orchestration events in tests
P2-3: Standardize ChatInput divergences — guard CancelSession, single-arg ProtocolError
P2-4: Remove dead TuiToolRecord.diff and ToolDisplayStatus.REQUESTED
P2-5: Remove dead streamLive from SessionEventBridge
P2-6: Extract SessionsReducerContext data class for 6+ param method
P2-7: Replace StageId("none") sentinel with TypeId.NONE
P2-9: Add TypeId.random() factory on all type-alias IDs
P2-10: Add KDoc on schemaVersion documenting reserved-for-migration
P2-8: Verified RouterReducer string-template already correct (TypeId value class toString)
68 lines
2.4 KiB
Kotlin
68 lines
2.4 KiB
Kotlin
import com.correx.core.context.DefaultContextReducer
|
|
import com.correx.core.context.state.ContextState
|
|
import com.correx.core.events.events.WorkflowStartedEvent
|
|
import com.correx.core.events.types.SessionId
|
|
import com.correx.core.events.types.StageId
|
|
import com.correx.testing.fixtures.EventFixtures.stored
|
|
import org.junit.jupiter.api.Assertions.assertEquals
|
|
import org.junit.jupiter.api.Assertions.assertFalse
|
|
import org.junit.jupiter.api.Test
|
|
|
|
class DefaultContextReducerTest {
|
|
|
|
private val reducer = DefaultContextReducer()
|
|
private val sessionId = SessionId("s1")
|
|
private val stageId = StageId("stage-1")
|
|
|
|
@Test
|
|
fun `WorkflowStartedEvent leaves buildingInProgress unchanged`() {
|
|
val state = reducer.reduce(
|
|
ContextState(),
|
|
stored(payload = WorkflowStartedEvent(sessionId, workflowId = "test-wf", startStageId = stageId))
|
|
)
|
|
assertFalse(state.buildingInProgress)
|
|
}
|
|
|
|
@Test
|
|
fun `WorkflowStartedEvent leaves builtPackIds unchanged`() {
|
|
val state = reducer.reduce(
|
|
ContextState(),
|
|
stored(payload = WorkflowStartedEvent(sessionId, workflowId = "test-wf", startStageId = stageId))
|
|
)
|
|
assertEquals(0, state.builtPackIds.size)
|
|
}
|
|
|
|
@Test
|
|
fun `WorkflowStartedEvent leaves buildingInProgress false`() {
|
|
val started = reducer.reduce(
|
|
ContextState(),
|
|
stored(payload = WorkflowStartedEvent(sessionId, workflowId = "test-wf", startStageId = stageId))
|
|
)
|
|
val after = reducer.reduce(
|
|
started,
|
|
stored(payload = WorkflowStartedEvent(sessionId, workflowId = "test-wf", startStageId = stageId))
|
|
)
|
|
assertFalse(after.buildingInProgress)
|
|
}
|
|
|
|
@Test
|
|
fun `WorkflowStartedEvent leaves interrupted unchanged`() {
|
|
val started = reducer.reduce(
|
|
ContextState(),
|
|
stored(payload = WorkflowStartedEvent(sessionId, workflowId = "test-wf", startStageId = stageId))
|
|
)
|
|
val after = reducer.reduce(
|
|
started,
|
|
stored(payload = WorkflowStartedEvent(sessionId, workflowId = "test-wf", startStageId = stageId))
|
|
)
|
|
assertFalse(after.interrupted)
|
|
}
|
|
|
|
@Test
|
|
fun `unrelated events leave state unchanged`() {
|
|
val state = ContextState()
|
|
val after = reducer.reduce(state, stored())
|
|
assertEquals(state, after)
|
|
}
|
|
}
|