From cd599047e368db0c8be88f11cae19a95da28994c Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Mon, 20 Apr 2026 16:16:08 +0200 Subject: [PATCH] =?utf8?q?=F0=9F=9A=A7=20Add=20merger=20for=20vacation=20h?= =?utf8?q?ome=20states?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../webpages/dasenbrook/DasenbrookMerger.kt | 15 +++++ .../webpages/dasenbrook/DasenbrookMergerTest.kt | 69 ++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/main/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMerger.kt create mode 100644 src/test/kotlin/net/pterodactylus/rhynodge/filters/webpages/dasenbrook/DasenbrookMergerTest.kt 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() + +} -- 2.7.4