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