--- /dev/null
+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()
+
+}