epic-12: after epic audit and init commit
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
import com.correx.core.artifacts.ArtifactState
|
||||
import com.correx.core.artifacts.DefaultArtifactReducer
|
||||
import com.correx.core.events.events.ArtifactArchivedEvent
|
||||
import com.correx.core.events.events.ArtifactCreatedEvent
|
||||
import com.correx.core.events.events.ArtifactRejectedEvent
|
||||
import com.correx.core.events.events.ArtifactRelationshipAddedEvent
|
||||
import com.correx.core.events.events.ArtifactSupersededEvent
|
||||
import com.correx.core.events.events.ArtifactValidatedEvent
|
||||
import com.correx.core.events.events.ArtifactValidatingEvent
|
||||
import com.correx.core.events.types.ArtifactId
|
||||
import com.correx.core.events.types.ArtifactLifecyclePhase
|
||||
import com.correx.core.events.types.ArtifactRelationshipType
|
||||
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.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class ArtifactReducerTest {
|
||||
|
||||
private lateinit var reducer: DefaultArtifactReducer
|
||||
|
||||
private val artifactId = ArtifactId("art1")
|
||||
private val sessionId = SessionId("sess1")
|
||||
private val stageId = StageId("stage1")
|
||||
|
||||
@BeforeEach
|
||||
fun setup() {
|
||||
reducer = DefaultArtifactReducer()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `CREATED to VALIDATING is valid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.CREATED)
|
||||
val event = stored(payload = ArtifactValidatingEvent(artifactId, sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(ArtifactLifecyclePhase.VALIDATING, result.getOrThrow().phase)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `VALIDATING to VALIDATED is valid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.VALIDATING)
|
||||
val event = stored(payload = ArtifactValidatedEvent(artifactId, sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(ArtifactLifecyclePhase.VALIDATED, result.getOrThrow().phase)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `VALIDATING to REJECTED is valid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.VALIDATING)
|
||||
val event = stored(payload = ArtifactRejectedEvent(artifactId, sessionId, stageId, "schema mismatch"))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(ArtifactLifecyclePhase.REJECTED, result.getOrThrow().phase)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `VALIDATED to SUPERSEDED is valid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.VALIDATED)
|
||||
val event = stored(payload = ArtifactSupersededEvent(artifactId, ArtifactId("art2"), sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(ArtifactLifecyclePhase.SUPERSEDED, result.getOrThrow().phase)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `VALIDATED to ARCHIVED is valid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.VALIDATED)
|
||||
val event = stored(payload = ArtifactArchivedEvent(artifactId, sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(ArtifactLifecyclePhase.ARCHIVED, result.getOrThrow().phase)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `REJECTED to ARCHIVED is valid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.REJECTED)
|
||||
val event = stored(payload = ArtifactArchivedEvent(artifactId, sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(ArtifactLifecyclePhase.ARCHIVED, result.getOrThrow().phase)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `CREATED to VALIDATED is invalid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.CREATED)
|
||||
val event = stored(payload = ArtifactValidatedEvent(artifactId, sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isFailure)
|
||||
assertTrue(result.exceptionOrNull() is IllegalStateException)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `VALIDATED to VALIDATING is invalid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.VALIDATED)
|
||||
val event = stored(payload = ArtifactValidatingEvent(artifactId, sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isFailure)
|
||||
assertTrue(result.exceptionOrNull() is IllegalStateException)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ARCHIVED to anything is invalid`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.ARCHIVED)
|
||||
val event = stored(payload = ArtifactValidatingEvent(artifactId, sessionId, stageId))
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isFailure)
|
||||
assertTrue(result.exceptionOrNull() is IllegalStateException)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `relationship added event appends to lineage`() {
|
||||
val state = ArtifactState(phase = ArtifactLifecyclePhase.CREATED)
|
||||
val event = stored(
|
||||
payload = ArtifactRelationshipAddedEvent(
|
||||
artifactId, ArtifactId("art2"), ArtifactRelationshipType.DERIVED_FROM, sessionId
|
||||
)
|
||||
)
|
||||
val result = reducer.reduce(state, event)
|
||||
assertTrue(result.isSuccess)
|
||||
assertEquals(1, result.getOrThrow().lineage.relationships.size)
|
||||
assertEquals(ArtifactRelationshipType.DERIVED_FROM, result.getOrThrow().lineage.relationships.first().type)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user