+ @Test
+ fun `loader can load Sone following times`() {
+ setupStringValue("SoneFollowingTimes/0/Sone", "Sone1")
+ setupLongValue("SoneFollowingTimes/0/Time", 1000L)
+ setupStringValue("SoneFollowingTimes/1/Sone", "Sone2")
+ setupLongValue("SoneFollowingTimes/1/Time", 2000L)
+ setupStringValue("SoneFollowingTimes/2/Sone")
+ assertThat(configurationLoader.getSoneFollowingTime("Sone1"), equalTo(1000L))
+ assertThat(configurationLoader.getSoneFollowingTime("Sone2"), equalTo(2000L))
+ assertThat(configurationLoader.getSoneFollowingTime("Sone3"), nullValue())
+ }
+
+ @Test
+ fun `loader can overwrite existing Sone following time`() {
+ val sone1Id = setupStringValue("SoneFollowingTimes/0/Sone", "Sone1")
+ val sone1Time = setupLongValue("SoneFollowingTimes/0/Time", 1000L)
+ val sone2Id = setupStringValue("SoneFollowingTimes/1/Sone", "Sone2")
+ val sone2Time = setupLongValue("SoneFollowingTimes/1/Time", 2000L)
+ setupStringValue("SoneFollowingTimes/2/Sone")
+ configurationLoader.setSoneFollowingTime("Sone1", 3000L)
+ assertThat(listOf(sone1Id.value to sone1Time.value, sone2Id.value to sone2Time.value), containsInAnyOrder<Pair<String?, Long?>>(
+ "Sone1" to 3000L,
+ "Sone2" to 2000L
+ ))
+ }
+
+ @Test
+ fun `loader can remove Sone following time`() {
+ val sone1Id = setupStringValue("SoneFollowingTimes/0/Sone", "Sone1")
+ val sone1Time = setupLongValue("SoneFollowingTimes/0/Time", 1000L)
+ val sone2Id = setupStringValue("SoneFollowingTimes/1/Sone", "Sone2")
+ val sone2Time = setupLongValue("SoneFollowingTimes/1/Time", 2000L)
+ setupStringValue("SoneFollowingTimes/2/Sone")
+ configurationLoader.removeSoneFollowingTime("Sone1")
+ assertThat(sone1Id.value, equalTo("Sone2"))
+ assertThat(sone1Time.value, equalTo(2000L))
+ assertThat(sone2Id.value, nullValue())
+ }
+
+ @Test
+ fun `sone with missing following time is not loaded`() {
+ setupStringValue("SoneFollowingTimes/0/Sone", "Sone1")
+ setupLongValue("SoneFollowingTimes/0/Time", 1000L)
+ setupStringValue("SoneFollowingTimes/1/Sone", "Sone2")
+ setupLongValue("SoneFollowingTimes/1/Time")
+ setupStringValue("SoneFollowingTimes/2/Sone")
+ assertThat(configurationLoader.getSoneFollowingTime("Sone1"), equalTo(1000L))
+ assertThat(configurationLoader.getSoneFollowingTime("Sone2"), nullValue())
+ assertThat(configurationLoader.getSoneFollowingTime("Sone3"), nullValue())
+ }
+