🚧 Add filter for free games from the Epic store
[rhynodge.git] / src / test / kotlin / net / pterodactylus / rhynodge / filters / webpages / epicgames / EpicGamesFilterTest.kt
1 package net.pterodactylus.rhynodge.filters.webpages.epicgames
2
3 import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
4 import net.pterodactylus.rhynodge.Filter
5 import net.pterodactylus.rhynodge.states.HttpState
6 import net.pterodactylus.rhynodge.states.JsonState
7 import org.hamcrest.MatcherAssert.assertThat
8 import org.hamcrest.Matchers.contains
9 import org.hamcrest.Matchers.instanceOf
10 import org.junit.Assert.assertThrows
11 import org.junit.Test
12 import java.time.Instant.parse
13
14 class EpicGamesFilterTest {
15
16         @Test
17         fun `epic games filter is a filter`() {
18                 assertThat(filter, instanceOf(Filter::class.java))
19         }
20
21         @Test
22         fun `filter throws exception when given html state`() {
23                 assertThrows(IllegalArgumentException::class.java) { filter.filter(HttpState("", 200, "", byteArrayOf())) }
24         }
25
26         @Test
27         fun `filter finds correct games`() {
28                 val gameState = filter.filter(JsonState(objectMapper.readTree(EpicGamesFilterTest::class.java.getResourceAsStream("epic.json")))) as FreeGamesState
29                 assertThat(
30                         gameState.games, contains(
31                                 FreeGame("Islets", "https://cdn1.epicgames.com/spt-assets/f991a978e0ce4156a52f951e96e388e7/download-islets-offer-rtq8h.png", parse("2024-03-28T15:00:00.000Z"), parse("2024-04-04T15:00:00.000Z")),
32                                 FreeGame("The Outer Worlds: Spacer's Choice Edition", "https://cdn1.epicgames.com/offer/dc61166eea95474e912953b163791d42/EGS_TheOuterWorldsSpacersChoiceEdition_ObsidianEntertainment_S2_1200x1600-24b156886564b75bf9aa823a0a0eb18e", parse("2024-04-04T15:00:00.000Z"), parse("2024-04-11T15:00:00.000Z")),
33                                 FreeGame("Thief", "https://cdn1.epicgames.com/spt-assets/44b12bc6a7f045a3bf313574c344dfd7/thief-1hsod.png", parse("2024-04-04T15:00:00.000Z"), parse("2024-04-11T15:00:00.000Z")),
34                                 FreeGame("Lost Castle: The Old Ones Awaken", "https://cdn1.epicgames.com/spt-assets/a6d76157ad884f2c9aa470b30da9e2ff/lost-castle-1qvy6.jpg", parse("2024-04-11T15:00:00.000Z"), parse("2024-04-25T15:00:00.000Z")),
35                         )
36                 )
37         }
38
39         private val filter = EpicGamesFilter()
40
41 }
42
43 private val objectMapper = jacksonObjectMapper()