From: David ‘Bombe’ Roden Date: Mon, 20 Apr 2026 14:16:08 +0000 (+0200) Subject: 🚧 Add merger for vacation home states X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=cd599047e368db0c8be88f11cae19a95da28994c;p=rhynodge.git 🚧 Add merger for vacation home states --- 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 index 0000000..43c8ca3 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMerger.kt @@ -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 index 0000000..f7cecbc --- /dev/null +++ b/src/test/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMergerTest.kt @@ -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() + +}