🚧 Add merger for vacation home states
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 20 Apr 2026 14:16:08 +0000 (16:16 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 20 Apr 2026 14:16:08 +0000 (16:16 +0200)
src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMerger.kt [new file with mode: 0644]
src/test/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMergerTest.kt [new file with mode: 0644]

diff --git a/src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMerger.kt b/src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMerger.kt
new file mode 100644 (file)
index 0000000..43c8ca3
--- /dev/null
@@ -0,0 +1,15 @@
+package net.pterodactylus.rhynodge.filters.webpages.dasenbrook
+
+import net.pterodactylus.rhynodge.Merger
+import net.pterodactylus.rhynodge.State
+
+class DasenbrookMerger() : Merger {
+
+       override fun mergeStates(previousState: State, currentState: State) =
+               currentState.apply {
+                       if (success() && (this != previousState)) {
+                               trigger()
+                       }
+               }
+
+}
diff --git a/src/test/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMergerTest.kt b/src/test/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMergerTest.kt
new file mode 100644 (file)
index 0000000..f7cecbc
--- /dev/null
@@ -0,0 +1,69 @@
+package net.pterodactylus.rhynodge.filters.webpages.dasenbrook
+
+import java.time.LocalDate
+import java.time.Month
+import java.time.Month.APRIL
+import net.pterodactylus.rhynodge.states.FailedState
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.equalTo
+import org.junit.jupiter.api.Test
+
+class DasenbrookMergerTest {
+
+       @Test
+       fun `merger returns current state if last state is failed`() {
+               val lastState = FailedState()
+               val currentState = VacationHomeState("foo", emptyList())
+               assertThat(merger.mergeStates(lastState, currentState), equalTo(currentState))
+       }
+
+       @Test
+       fun `merger returns triggered state if last state is failed and current state is success`() {
+               val lastState = FailedState()
+               val currentState = VacationHomeState("foo", emptyList())
+               val mergedState = merger.mergeStates(lastState, currentState)
+               assertThat(mergedState.triggered(), equalTo(true))
+       }
+
+       @Test
+       fun `merger returns current state if last state is success and different from current state`() {
+               val lastState = VacationHomeState("foo", emptyList())
+               val currentState = VacationHomeState("foo", listOf(Vacancy(LocalDate.of(2026, APRIL, 20), LocalDate.of(2026, APRIL, 25))))
+               assertThat(merger.mergeStates(lastState, currentState), equalTo(currentState))
+       }
+
+       @Test
+       fun `merger returns triggered state if last state is success and current state is different success`() {
+               val lastState = VacationHomeState("foo", emptyList())
+               val currentState = VacationHomeState("foo", listOf(Vacancy(LocalDate.of(2026, APRIL, 20), LocalDate.of(2026, APRIL, 25))))
+               val mergedState = merger.mergeStates(lastState, currentState)
+               assertThat(mergedState.triggered(), equalTo(true))
+       }
+
+       @Test
+       fun `merger does not return triggered state if last state is success and current state is the same success`() {
+               val lastState = VacationHomeState("foo", listOf(Vacancy(LocalDate.of(2026, APRIL, 20), LocalDate.of(2026, APRIL, 25))))
+               val currentState = VacationHomeState("foo", listOf(Vacancy(LocalDate.of(2026, APRIL, 20), LocalDate.of(2026, APRIL, 25))))
+               val mergedState = merger.mergeStates(lastState, currentState)
+               assertThat(mergedState.triggered(), equalTo(false))
+       }
+
+       @Test
+       fun `merger returns failed state if current state is failure`() {
+               val lastState = VacationHomeState("foo", listOf(Vacancy(LocalDate.of(2026, APRIL, 20), LocalDate.of(2026, APRIL, 25))))
+               val currentState = FailedState()
+               val mergedState = merger.mergeStates(lastState, currentState)
+               assertThat(mergedState.success(), equalTo(false))
+       }
+
+       @Test
+       fun `merger does not return triggered state if current state is failure`() {
+               val lastState = VacationHomeState("foo", listOf(Vacancy(LocalDate.of(2026, APRIL, 20), LocalDate.of(2026, APRIL, 25))))
+               val currentState = FailedState()
+               val mergedState = merger.mergeStates(lastState, currentState)
+               assertThat(mergedState.triggered(), equalTo(false))
+       }
+
+       private val merger = DasenbrookMerger()
+
+}