🐛 Fix sone-locked notification not showing all Sones
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Tue, 10 Dec 2019 18:56:22 +0000 (19:56 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 11 Dec 2019 15:59:18 +0000 (16:59 +0100)
src/main/kotlin/net/pterodactylus/sone/web/notification/SoneLockedHandler.kt
src/test/kotlin/net/pterodactylus/sone/web/notification/SoneLockedHandlerTest.kt

index 583601b..e8f2a79 100644 (file)
@@ -40,25 +40,25 @@ class SoneLockedHandler @Inject constructor(
        @Subscribe
        fun soneLocked(soneLockedEvent: SoneLockedEvent) {
                synchronized(future) {
-                       future.get()?.also { cancelPreviousFuture(it, soneLockedEvent.sone) }
-                       future.set(executor.schedule(showNotification(soneLockedEvent.sone), 5, TimeUnit.MINUTES))
+                       notification.add(soneLockedEvent.sone)
+                       future.get()?.also(this::cancelPreviousFuture)
+                       future.set(executor.schedule(::showNotification, 5, TimeUnit.MINUTES))
                }
        }
 
        @Subscribe
        fun soneUnlocked(soneUnlockedEvent: SoneUnlockedEvent) {
                synchronized(future) {
-                       future.get()?.also { cancelPreviousFuture(it, soneUnlockedEvent.sone) }
+                       notification.remove(soneUnlockedEvent.sone)
+                       future.get()?.also(::cancelPreviousFuture)
                }
        }
 
-       private fun cancelPreviousFuture(future: ScheduledFuture<*>, sone: Sone) {
-               notification.remove(sone)
+       private fun cancelPreviousFuture(future: ScheduledFuture<*>) {
                future.cancel(true)
        }
 
-       private fun showNotification(sone: Sone): () -> Unit = {
-               notification.add(sone)
+       private fun showNotification() {
                notificationManager.addNotification(notification)
        }
 
index 2daf5c9..191168e 100644 (file)
@@ -44,16 +44,18 @@ class SoneLockedHandlerTest {
                SoneLockedHandler(notificationManager, notification, executor).also(eventBus::register)
        }
 
+       @AfterTest
+       fun shutdownExecutor() = executor.shutdown()
+
        @Test
-       fun `notification is not added during the first five minutes`() {
+       fun `notification is not added before the command is run`() {
                eventBus.post(SoneLockedEvent(sone))
                assertThat(notificationManager.notifications, emptyIterable())
        }
 
        @Test
-       fun `sone is added to notification from command`() {
+       fun `sone is added to notification immediately`() {
                eventBus.post(SoneLockedEvent(sone))
-               executor.scheduledDelay.single().command.run()
                assertThat(notification.elements, contains(sone))
        }