package net.pterodactylus.rhynodge.webpages.weather.wettercom import net.pterodactylus.rhynodge.Reaction import net.pterodactylus.rhynodge.webpages.weather.HourState import net.pterodactylus.rhynodge.webpages.weather.WindDirection import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.`is` import org.hamcrest.Matchers.containsString import org.junit.Test import org.mockito.Mockito import java.time.ZoneId import java.time.ZonedDateTime /** * Unit test for [WetterComTrigger]. * @author [David ‘Bombe’ Roden](mailto:bombe@pterodactylus.net) */ class WetterComTriggerTest { private val trigger = WetterComTrigger() private val now = ZonedDateTime.now() private val previousState = WetterComState(now) @Test fun equalStatesAreNotMerged() { val currentState = WetterComState(now) val newState = trigger.mergeStates(previousState, currentState) as WetterComState assertThat(newState, `is`(previousState)) assertThat(newState, `is`(currentState)) } @Test fun currentStateIsReturnedIfDifferentFromPreviousState() { val currentState = WetterComState(now.minusDays(1)) val newState = trigger.mergeStates(previousState, currentState) as WetterComState assertThat(newState, `is`(currentState)) } @Test fun mergingEqualStatesDoesNotTrigger() { val currentState = WetterComState(now) trigger.mergeStates(previousState, currentState) as WetterComState assertThat(trigger.triggers(), `is`(false)) } @Test fun mergingDifferentStatesDoesTrigger() { val currentState = WetterComState(now.minusDays(1)) trigger.mergeStates(previousState, currentState) as WetterComState assertThat(trigger.triggers(), `is`(true)) } @Test fun outputSummaryContainsCorrectDate() { val currentState = WetterComState(ZonedDateTime.of(2000, 1, 1, 5, 0, 0, 0, ZoneId.of("Europe/Berlin"))) trigger.mergeStates(previousState, currentState) as WetterComState val reaction = Mockito.mock(Reaction::class.java) val output = trigger.output(reaction) assertThat(output.summary(), `is`("The weather (according to wetter.com) on January 1, 2000")) } @Test fun outputHtmlContainsHourStates() { val currentState = WetterComState(now.minusDays(1)) currentState += HourState(0, 10, null, 0.11, 12.0, WindDirection.NORTH, 13, null, null, "Rain", "http://1") currentState += HourState(1, 14, null, 0.15, 16.0, WindDirection.SOUTH, 17, null, null, "Sun", "http://2") trigger.mergeStates(previousState, currentState) as WetterComState val reaction = Mockito.mock(Reaction::class.java) val output = trigger.output(reaction) val htmlText = output.text("text/html", -1) assertThat(htmlText, containsString("10 °C")) assertThat(htmlText, containsString("11%")) assertThat(htmlText, containsString("12 l/m")) assertThat(htmlText, containsString("13 km/h")) assertThat(htmlText, containsString("Rain")) assertThat(htmlText, containsString("http://1")) assertThat(htmlText, containsString("14 °C")) assertThat(htmlText, containsString("15%")) assertThat(htmlText, containsString("16 l/m")) assertThat(htmlText, containsString("17 km/h")) assertThat(htmlText, containsString("Sun")) assertThat(htmlText, containsString("http://2")) } }