♻️ Remove “addPerformance” method
[rhynodge.git] / src / test / kotlin / net / pterodactylus / rhynodge / filters / webpages / savoy / SavoyMergerTest.kt
1 package net.pterodactylus.rhynodge.filters.webpages.savoy
2
3 import net.pterodactylus.rhynodge.states.StateManagerTest.TestState
4 import org.hamcrest.MatcherAssert.assertThat
5 import org.hamcrest.Matchers.containsInAnyOrder
6 import org.hamcrest.Matchers.empty
7 import org.hamcrest.Matchers.equalTo
8 import org.junit.Assert.assertThrows
9 import org.junit.Test
10 import java.time.LocalDateTime
11
12 class SavoyMergerTest {
13
14         @Test
15         fun `merger throws exception if first state is not a movie state`() {
16                 assertThrows(IllegalArgumentException::class.java) { merger.mergeStates(TestState(), MovieState(emptySet())) }
17         }
18
19         @Test
20         fun `merger throws exception if second state is not a movie state`() {
21                 assertThrows(IllegalArgumentException::class.java) { merger.mergeStates(MovieState(emptySet()), TestState()) }
22         }
23
24         @Test
25         fun `merging two empty states results in an empty state`() {
26                 assertThat(merger.mergeStates(MovieState(emptySet()), MovieState(emptySet())).isEmpty, equalTo(true))
27         }
28
29         @Test
30         fun `merging a non-empty state into an empty state results in a state containing all movies`() {
31                 val oldState = MovieState(emptySet())
32                 val newState = MovieState(setOf(Movie("1", "")))
33                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
34                 assertThat(mergedState.movies, containsInAnyOrder(Movie("1", "")))
35         }
36
37         @Test
38         fun `merging two states keeps only movies from current state`() {
39                 val oldState = MovieState(setOf(Movie("1", ""), Movie("3", "")))
40                 val newState = MovieState(setOf(Movie("2", ""), Movie("4", "")))
41                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
42                 assertThat(mergedState.movies, containsInAnyOrder(Movie("2", ""), Movie("4", "")))
43         }
44
45         @Test
46         fun `merging a state with new movies identifies new movies`() {
47                 val oldState = MovieState(setOf(Movie("1", ""), Movie("2", ""), Movie("3", "")))
48                 val newState = MovieState(setOf(Movie("2", ""), Movie("3", ""), Movie("4", "")))
49                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
50                 assertThat(mergedState.newMovies, containsInAnyOrder(Movie("4", "")))
51         }
52
53         @Test
54         fun `movies with different performances are still considered the same movie`() {
55                 val oldState = MovieState(setOf(Movie("1", "", "", listOf(Performance(LocalDateTime.of(2024, 2, 14, 18, 45), "", "")))))
56                 val newState = MovieState(setOf(Movie("1", "", "", listOf(Performance(LocalDateTime.of(2024, 2, 15, 14, 30), "", "")))))
57                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
58                 assertThat(mergedState.newMovies, empty())
59         }
60
61         @Test
62         fun `merging states with movies starting the same day does not create a triggered state`() {
63                 val oldState = MovieState(setOf(Movie("1", "", "", listOf(Performance(LocalDateTime.of(2024, 2, 14, 18, 45), "", "")))))
64                 val newState = MovieState(setOf(Movie("1", "", "", listOf(Performance(LocalDateTime.of(2024, 2, 14, 14, 30), "", "")))))
65                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
66                 assertThat(mergedState.triggered(), equalTo(false))
67         }
68
69         @Test
70         fun `merging states with movies starting on different days does create a triggered state`() {
71                 val oldState = MovieState(setOf(Movie("1", "", "", listOf(Performance(LocalDateTime.of(2024, 2, 14, 18, 45), "", "")))))
72                 val newState = MovieState(setOf(Movie("1", "", "", listOf(Performance(LocalDateTime.of(2024, 2, 15, 14, 30), "", "")))))
73                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
74                 assertThat(mergedState.triggered(), equalTo(true))
75         }
76
77         @Test
78         fun `merging states where movies have different performances but still on the same day does not create a triggered state`() {
79                 val oldState = MovieState(setOf(Movie("1", "", "", listOf(
80                         Performance(LocalDateTime.of(2024, 2, 14, 14, 30), "", ""),
81                         Performance(LocalDateTime.of(2024, 2, 14, 18, 45), "", "")
82                 ))))
83                 val newState = MovieState(setOf(Movie("1", "", "", listOf(
84                         Performance(LocalDateTime.of(2024, 2, 14, 18, 45), "", "")
85                 ))))
86                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
87                 assertThat(mergedState.triggered(), equalTo(false))
88         }
89
90         @Test
91         fun `merging states where movies have different performances and are not on the same day anymore does create a triggered state`() {
92                 val oldState = MovieState(setOf(Movie("1", "", "", listOf(
93                         Performance(LocalDateTime.of(2024, 2, 14, 18, 45), "", ""),
94                         Performance(LocalDateTime.of(2024, 2, 15, 14, 30), "", "")
95                 ))))
96                 val newState = MovieState(setOf(Movie("1", "", "", listOf(
97                         Performance(LocalDateTime.of(2024, 2, 15, 14, 30), "", "")
98                 ))))
99                 val mergedState = merger.mergeStates(oldState, newState) as MovieState
100                 assertThat(mergedState.triggered(), equalTo(true))
101         }
102
103         private val merger = SavoyMerger()
104
105 }