🚧 Add filter for free games from the Epic store
[rhynodge.git] / src / test / kotlin / net / pterodactylus / rhynodge / filters / webpages / epicgames / EpicGamesFilterTest.kt
diff --git a/src/test/kotlin/net/pterodactylus/rhynodge/filters/webpages/epicgames/EpicGamesFilterTest.kt b/src/test/kotlin/net/pterodactylus/rhynodge/filters/webpages/epicgames/EpicGamesFilterTest.kt
new file mode 100644 (file)
index 0000000..2d44796
--- /dev/null
@@ -0,0 +1,43 @@
+package net.pterodactylus.rhynodge.filters.webpages.epicgames
+
+import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
+import net.pterodactylus.rhynodge.Filter
+import net.pterodactylus.rhynodge.states.HttpState
+import net.pterodactylus.rhynodge.states.JsonState
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.contains
+import org.hamcrest.Matchers.instanceOf
+import org.junit.Assert.assertThrows
+import org.junit.Test
+import java.time.Instant.parse
+
+class EpicGamesFilterTest {
+
+       @Test
+       fun `epic games filter is a filter`() {
+               assertThat(filter, instanceOf(Filter::class.java))
+       }
+
+       @Test
+       fun `filter throws exception when given html state`() {
+               assertThrows(IllegalArgumentException::class.java) { filter.filter(HttpState("", 200, "", byteArrayOf())) }
+       }
+
+       @Test
+       fun `filter finds correct games`() {
+               val gameState = filter.filter(JsonState(objectMapper.readTree(EpicGamesFilterTest::class.java.getResourceAsStream("epic.json")))) as FreeGamesState
+               assertThat(
+                       gameState.games, contains(
+                               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")),
+                               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")),
+                               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")),
+                               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")),
+                       )
+               )
+       }
+
+       private val filter = EpicGamesFilter()
+
+}
+
+private val objectMapper = jacksonObjectMapper()