🚧 Add merger for free games from the Epic games store
[rhynodge.git] / src / test / kotlin / net / pterodactylus / rhynodge / filters / webpages / epicgames / EpicGamesMergerTest.kt
1 package net.pterodactylus.rhynodge.filters.webpages.epicgames
2
3 import net.pterodactylus.rhynodge.Merger
4 import net.pterodactylus.rhynodge.states.StateManagerTest.TestState
5 import org.hamcrest.MatcherAssert.assertThat
6 import org.hamcrest.Matchers.contains
7 import org.hamcrest.Matchers.empty
8 import org.hamcrest.Matchers.equalTo
9 import org.hamcrest.Matchers.instanceOf
10 import org.junit.Assert.assertThrows
11 import org.junit.Test
12 import java.time.Instant
13
14 class EpicGamesMergerTest {
15
16         @Test
17         fun `merger implements Merger interface`() {
18                 assertThat(merger, instanceOf(Merger::class.java))
19         }
20
21         @Test
22         fun `merger throws exception if previous state is not a free games state`() {
23                 assertThrows(IllegalArgumentException::class.java) { merger.mergeStates(TestState(), emptyState) }
24         }
25
26         @Test
27         fun `merger throws exception if current state is not a free games state`() {
28                 assertThrows(IllegalArgumentException::class.java) { merger.mergeStates(emptyState, TestState()) }
29         }
30
31         @Test
32         fun `merger given two empty free game states returns an empty state`() {
33                 val mergedState = merger.mergeStates(emptyState, emptyState) as FreeGamesState
34                 assertThat(mergedState.games, empty())
35         }
36
37         @Test
38         fun `merging two empty states results in not-triggered state`() {
39                 val mergedState = merger.mergeStates(emptyState, emptyState) as FreeGamesState
40                 assertThat(mergedState.triggered(), equalTo(false))
41         }
42
43         @Test
44         fun `merging state without games into state with games returns state without games`() {
45                 val mergedState = merger.mergeStates(stateWithOneGame, emptyState) as FreeGamesState
46                 assertThat(mergedState.games, empty())
47         }
48
49         @Test
50         fun `merging state without games into state with games returns not-triggered state`() {
51                 val mergedState = merger.mergeStates(stateWithOneGame, emptyState) as FreeGamesState
52                 assertThat(mergedState.triggered(), equalTo(false))
53         }
54
55         @Test
56         fun `merging state with games into state without games returns state with games`() {
57                 val mergedState = merger.mergeStates(emptyState, stateWithOneGame) as FreeGamesState
58                 assertThat(mergedState.games, contains(game1))
59         }
60
61         @Test
62         fun `merging state with games into state without games returns a triggered state`() {
63                 val mergedState = merger.mergeStates(emptyState, stateWithOneGame) as FreeGamesState
64                 assertThat(mergedState.triggered(), equalTo(true))
65         }
66
67         @Test
68         fun `merge state with more games into state with less games returns a triggered state`() {
69                 val mergedState = merger.mergeStates(stateWithOneGame, stateWithTwoGames) as FreeGamesState
70                 assertThat(mergedState.triggered(), equalTo(true))
71         }
72
73         @Test
74         fun `merge state with less games into state with more games does not return a triggered state`() {
75                 val mergedState = merger.mergeStates(stateWithTwoGames, stateWithOneGame) as FreeGamesState
76                 assertThat(mergedState.triggered(), equalTo(false))
77         }
78
79         private val merger = EpicGamesMerger()
80
81 }
82
83 private val emptyState = FreeGamesState(emptySet())
84 private val game1 = FreeGame("1", "i", Instant.now(), Instant.now())
85 private val game2 = FreeGame("2", "i", Instant.now(), Instant.now())
86 private val stateWithOneGame = FreeGamesState(setOf(game1))
87 private val stateWithTwoGames = FreeGamesState(setOf(game1, game2))