1 package net.pterodactylus.rhynodge.filters.webpages.epicgames
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
12 import java.time.Instant
14 class EpicGamesMergerTest {
17 fun `merger implements Merger interface`() {
18 assertThat(merger, instanceOf(Merger::class.java))
22 fun `merger throws exception if previous state is not a free games state`() {
23 assertThrows(IllegalArgumentException::class.java) { merger.mergeStates(TestState(), emptyState) }
27 fun `merger throws exception if current state is not a free games state`() {
28 assertThrows(IllegalArgumentException::class.java) { merger.mergeStates(emptyState, TestState()) }
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())
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))
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())
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))
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))
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))
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))
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))
79 private val merger = EpicGamesMerger()
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))