Added order for listeners
This commit is contained in:
parent
1e179e32a5
commit
c2f0c24a8f
2
.idea/vcs.xml
generated
2
.idea/vcs.xml
generated
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@ -7,5 +7,5 @@ abstract class ListenerRegistryImplementation<T> {
|
||||
listeners.add(listener)
|
||||
}
|
||||
|
||||
fun getListeners(): List<T> = listeners.toList()
|
||||
open fun getListeners(): List<T> = listeners.toList()
|
||||
}
|
||||
@ -1,6 +1,11 @@
|
||||
package no.iktdev.eventi.events
|
||||
|
||||
import no.iktdev.eventi.ListenerOrder
|
||||
import no.iktdev.eventi.ListenerRegistryImplementation
|
||||
|
||||
object EventListenerRegistry : ListenerRegistryImplementation<EventListener>() {
|
||||
override fun getListeners(): List<EventListener> {
|
||||
return super.getListeners()
|
||||
.sortedBy { it::class.java.getAnnotation(ListenerOrder::class.java)?.value ?: Int.MAX_VALUE }
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,11 @@
|
||||
package no.iktdev.eventi.tasks
|
||||
|
||||
import no.iktdev.eventi.ListenerOrder
|
||||
import no.iktdev.eventi.ListenerRegistryImplementation
|
||||
|
||||
object TaskListenerRegistry: ListenerRegistryImplementation<TaskListener>() {
|
||||
|
||||
override fun getListeners(): List<TaskListener> {
|
||||
return super.getListeners()
|
||||
.sortedBy { it::class.java.getAnnotation(ListenerOrder::class.java)?.value ?: Int.MAX_VALUE }
|
||||
}
|
||||
}
|
||||
@ -8,6 +8,7 @@ import no.iktdev.eventi.events.EventListenerRegistry
|
||||
import no.iktdev.eventi.events.EventTypeRegistry
|
||||
import no.iktdev.eventi.models.DeleteEvent
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.eventi.models.Metadata
|
||||
import no.iktdev.eventi.testUtil.wipe
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
@ -15,6 +16,7 @@ import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.time.LocalDateTime
|
||||
import java.util.UUID
|
||||
@ -26,6 +28,11 @@ class EventDispatcherTest: TestBase() {
|
||||
class TriggerEvent(): Event() {
|
||||
}
|
||||
class OtherEvent(): Event()
|
||||
class DummyEvent(): Event() {
|
||||
fun putMetadata(metadata: Metadata) {
|
||||
this.metadata = metadata
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@BeforeEach
|
||||
@ -37,7 +44,8 @@ class EventDispatcherTest: TestBase() {
|
||||
EventTypeRegistry.register(listOf(
|
||||
DerivedEvent::class.java,
|
||||
TriggerEvent::class.java,
|
||||
OtherEvent::class.java
|
||||
OtherEvent::class.java,
|
||||
DummyEvent::class.java
|
||||
))
|
||||
}
|
||||
|
||||
@ -146,6 +154,30 @@ class EventDispatcherTest: TestBase() {
|
||||
assertTrue(received.contains(deleted))
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Replay skal ikke levere en event som allerede har avledet en ny")
|
||||
fun `should not re-deliver events that have produced derived events`() {
|
||||
val listener = ProducingListener()
|
||||
|
||||
val trigger = TriggerEvent()
|
||||
// Første dispatch: trigger produserer en DerivedEvent
|
||||
dispatcher.dispatch(trigger.referenceId, listOf(trigger))
|
||||
|
||||
val produced = eventStore.all().mapNotNull { it.toEvent() }
|
||||
assertEquals(1, produced.size)
|
||||
val derived = produced.first()
|
||||
assertTrue(derived is DerivedEvent)
|
||||
|
||||
// Replay: nå har vi både trigger og derived i konteksten
|
||||
val replayContext = listOf(trigger, derived)
|
||||
dispatcher.dispatch(trigger.referenceId, replayContext)
|
||||
|
||||
// Verifiser at ingen nye events ble produsert
|
||||
assertEquals(1, eventStore.all().size) {
|
||||
"TriggerEvent skal ikke leveres som kandidat igjen når den allerede har avledet en DerivedEvent"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// --- Test helpers ---
|
||||
|
||||
Loading…
Reference in New Issue
Block a user