feat(journal): core:journal module — decision journal projection
This commit is contained in:
@@ -13,5 +13,6 @@ dependencies {
|
||||
testImplementation(project(":core:kernel"))
|
||||
testImplementation(project(":core:artifacts"))
|
||||
testImplementation(project(":core:router"))
|
||||
testImplementation(project(":core:journal"))
|
||||
implementation(project(":testing:fixtures"))
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import com.correx.core.events.events.SteeringNoteAddedEvent
|
||||
import com.correx.core.events.events.TransitionExecutedEvent
|
||||
import com.correx.core.events.types.SessionId
|
||||
import com.correx.core.events.types.StageId
|
||||
import com.correx.core.events.types.TransitionId
|
||||
import com.correx.core.journal.DecisionJournalProjector
|
||||
import com.correx.core.journal.DefaultDecisionJournalReducer
|
||||
import com.correx.core.journal.model.DecisionKind
|
||||
import com.correx.testing.fixtures.EventFixtures.stored
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class DecisionJournalProjectorTest {
|
||||
private val projector = DecisionJournalProjector(DefaultDecisionJournalReducer())
|
||||
|
||||
@Test
|
||||
fun `steering and transition each produce one ordered record`() {
|
||||
var s = projector.initial()
|
||||
s = projector.apply(
|
||||
s,
|
||||
stored(
|
||||
payload = SteeringNoteAddedEvent(SessionId("x"), "use jwt", StageId("plan")),
|
||||
sequence = 1L,
|
||||
),
|
||||
)
|
||||
s = projector.apply(
|
||||
s,
|
||||
stored(
|
||||
payload = TransitionExecutedEvent(SessionId("x"), StageId("plan"), StageId("impl"), TransitionId("t1")),
|
||||
sequence = 2L,
|
||||
),
|
||||
)
|
||||
assertEquals(2, s.records.size)
|
||||
assertEquals(DecisionKind.STEERING, s.records[0].kind)
|
||||
assertEquals(DecisionKind.TRANSITION, s.records[1].kind)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `unrelated events are ignored`() {
|
||||
val s0 = projector.initial()
|
||||
val s1 = projector.apply(
|
||||
s0,
|
||||
stored(payload = SteeringNoteAddedEvent(SessionId("x"), "note")),
|
||||
)
|
||||
assertEquals(1, s1.records.size)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user