b3de81069537c0953241db5f1dea102976405db9
[rhynodge.git] / src / test / kotlin / net / pterodactylus / rhynodge / webpages / weather / wetterde / WetterDeStateTest.kt
1 package net.pterodactylus.rhynodge.webpages.weather.wetterde
2
3 import com.fasterxml.jackson.databind.ObjectMapper
4 import net.pterodactylus.rhynodge.webpages.weather.WindDirection
5 import org.hamcrest.MatcherAssert.assertThat
6 import org.hamcrest.Matchers.`is`
7 import org.junit.Test
8 import java.time.ZoneId.of
9 import java.time.ZonedDateTime
10
11 /**
12  * Unit test for [WetterDeState].
13  *
14  * @author [David ‘Bombe’ Roden](mailto:bombe@pterodactylus.net)
15  */
16 class WetterDeStateTest {
17
18     private val now = ZonedDateTime.now(of("Europe/Berlin"))
19
20     @Test
21     fun statesWithTheSameDateAndHoursAreEqual() {
22         val firstState = WetterDeState(now)
23         firstState += createHourState(0)
24         firstState += createHourState(1)
25         val secondState = WetterDeState(now)
26         secondState += createHourState(0)
27         secondState += createHourState(1)
28         assertThat(firstState, `is`(secondState))
29     }
30
31     private fun createHourState(hourIndex: Int): HourState {
32         return HourState(
33                 hourIndex,
34                 10 + hourIndex,
35                 12 + hourIndex,
36                 (50 + hourIndex) / 100.0,
37                 hourIndex.toDouble(),
38                 WindDirection.values().get(hourIndex % WindDirection.values().size),
39                 20 + hourIndex,
40                 30 + hourIndex,
41                 (40 + hourIndex) / 100.0,
42                 "foo: " + hourIndex,
43                 "//" + hourIndex
44         )
45     }
46
47     @Test
48     fun stateIsSerializableAsJson() {
49         val originalState = WetterDeState(now)
50         originalState += createHourState(0)
51         originalState += createHourState(1)
52         val json = ObjectMapper().writeValueAsString(originalState)
53         val parsedState = ObjectMapper().readValue(json, WetterDeState::class.java)
54         assertThat(parsedState, `is`(originalState))
55     }
56
57 }