diff --git a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt index 2638ff93..b5c33924 100644 --- a/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt +++ b/apps/coordinator/src/main/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListener.kt @@ -37,7 +37,8 @@ class ConvertWorkTaskListener: WorkTaskListener() { return true } override fun shouldIProcessAndHandleEvent(incomingEvent: Event, events: List): Boolean { - if (!super.shouldIProcessAndHandleEvent(incomingEvent, events)) { + val mainCheckOk = super.shouldIProcessAndHandleEvent(incomingEvent, events); + if (!mainCheckOk) { return false } @@ -49,18 +50,16 @@ class ConvertWorkTaskListener: WorkTaskListener() { log.info { "Permitting handling of event: ${extractedEvent.data?.outputFile}" } } - val startOperation = events.findFirstOf(Events.ProcessStarted)?.dataAs() + val startOperation = events.findFirstOf(Events.ProcessStarted)?.dataAs() if (startOperation == null) { log.error { "Could not find 'ProcessStarted' event" } return false } - if (startOperation.data?.operations?.isOnly(OperationEvents.CONVERT) == true) { - log.info { "StartOperation should only be Convert, ${WGson.toJson(startOperation)}" } - return true - } else { - return shouldIHandleAndProduce + if (incomingEvent.isOfEvent(Events.ProcessStarted)) { + return startOperation.operations.isOnly(OperationEvents.CONVERT) } + return shouldIHandleAndProduce } override fun onEventsReceived(incomingEvent: ConsumableEvent, events: List) { val event = incomingEvent.consume() diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/TestData.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/TestData.kt new file mode 100644 index 00000000..1074aa87 --- /dev/null +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/TestData.kt @@ -0,0 +1,28 @@ +package no.iktdev.mediaprocessing.coordinator + +import no.iktdev.eventi.data.EventMetadata +import no.iktdev.eventi.data.EventStatus +import no.iktdev.mediaprocessing.shared.common.contract.data.MediaProcessStartEvent +import no.iktdev.mediaprocessing.shared.common.contract.data.StartEventData +import no.iktdev.mediaprocessing.shared.common.contract.dto.OperationEvents +import java.util.UUID + +val defaultReferenceId = UUID.randomUUID().toString() + +fun defaultStartEvent(): MediaProcessStartEvent { + return MediaProcessStartEvent( + metadata = defaultMetadata(), + data = StartEventData( + operations = listOf(OperationEvents.ENCODE, OperationEvents.EXTRACT, OperationEvents.CONVERT), + file = "DummyTestFile.mkv" + ) + ) +} + +fun defaultMetadata(): EventMetadata { + return EventMetadata( + referenceId = defaultReferenceId, + status = EventStatus.Success, + source = "TestData" + ) +} \ No newline at end of file diff --git a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListenerTest.kt b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListenerTest.kt index 4aabc574..945a9b14 100644 --- a/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListenerTest.kt +++ b/apps/coordinator/src/test/kotlin/no/iktdev/mediaprocessing/coordinator/tasksV2/listeners/ConvertWorkTaskListenerTest.kt @@ -2,14 +2,62 @@ package no.iktdev.mediaprocessing.coordinator.tasksV2.listeners import no.iktdev.eventi.data.referenceId import no.iktdev.mediaprocessing.Files +import no.iktdev.mediaprocessing.coordinator.defaultMetadata +import no.iktdev.mediaprocessing.coordinator.defaultStartEvent import no.iktdev.mediaprocessing.databaseJsonToEvents import no.iktdev.mediaprocessing.shared.common.contract.Events +import no.iktdev.mediaprocessing.shared.common.contract.data.Event +import no.iktdev.mediaprocessing.shared.common.contract.data.StartEventData +import no.iktdev.mediaprocessing.shared.common.contract.dto.OperationEvents import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test class ConvertWorkTaskListenerTest { + @Test + @DisplayName(""" + When incoming event is of Start Event, and there is multiple operations, + Validation check should fail + """) + fun validate_shouldIProcessAndHandleEvent1() { + val listener = ConvertWorkTaskListener() + val events = listOf(defaultStartEvent()) + val result = listener.shouldIProcessAndHandleEvent(defaultStartEvent(), events) + assertThat(result).isFalse() + } + @Test + @DisplayName(""" + When incoming event is of Start Event but start is missing form list, and there is multiple operations, + Validation check should fail + """) + fun validate_shouldIProcessAndHandleEvent2() { + val listener = ConvertWorkTaskListener() + val result = listener.shouldIProcessAndHandleEvent(defaultStartEvent(), emptyList()) + assertThat(result).isFalse() + } + + @Test + @DisplayName(""" + When incoming event is of Start Event and single operation is Convert, + Validation check should succeed + """) + fun validate_shouldIProcessAndHandleEvent3() { + val listener = ConvertWorkTaskListener() + val startedEvent = defaultStartEvent().copy( + data = StartEventData( + operations = listOf(OperationEvents.CONVERT), + file = "DummyTestFile.ass" + ) + ) + val events = listOf(startedEvent) + val result = listener.shouldIProcessAndHandleEvent(startedEvent, events) + assertThat(result).isTrue() + } + + + @Test fun validateParsingOfEvents() { val content = Files.MultipleLanguageBased.databaseJsonToEvents()