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()