🐛 Fix NPE during Sone removal
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 29 Jul 2020 22:12:13 +0000 (00:12 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 29 Jul 2020 22:12:13 +0000 (00:12 +0200)
src/main/kotlin/net/pterodactylus/sone/web/notification/LocalPostHandler.kt
src/test/kotlin/net/pterodactylus/sone/web/notification/LocalPostHandlerTest.kt

index e7b8f05..5951997 100644 (file)
 
 package net.pterodactylus.sone.web.notification
 
-import com.google.common.eventbus.*
-import net.pterodactylus.sone.core.event.*
-import net.pterodactylus.sone.data.*
-import net.pterodactylus.sone.notify.*
-import net.pterodactylus.util.notify.*
-import javax.inject.*
+import com.google.common.eventbus.Subscribe
+import net.pterodactylus.sone.core.event.MarkPostKnownEvent
+import net.pterodactylus.sone.core.event.NewPostFoundEvent
+import net.pterodactylus.sone.core.event.PostRemovedEvent
+import net.pterodactylus.sone.data.Post
+import net.pterodactylus.sone.notify.ListNotification
+import net.pterodactylus.sone.notify.hasFirstStartNotification
+import net.pterodactylus.util.notify.NotificationManager
+import javax.inject.Inject
+import javax.inject.Named
 
 /**
  * Handler for local posts.
@@ -56,4 +60,4 @@ class LocalPostHandler @Inject constructor(private val notificationManager: Noti
 }
 
 private fun Post.onLocal(action: (Post) -> Unit) =
-               if (sone.isLocal) action(this) else Unit
+               if ((sone == null) || sone!!.isLocal) action(this) else Unit
index 22648b5..70aa709 100644 (file)
@@ -22,6 +22,7 @@ import net.pterodactylus.sone.core.event.*
 import net.pterodactylus.sone.data.*
 import net.pterodactylus.sone.data.impl.*
 import net.pterodactylus.sone.notify.*
+import net.pterodactylus.sone.test.createPost
 import net.pterodactylus.util.notify.*
 import net.pterodactylus.util.template.*
 import org.hamcrest.MatcherAssert.*
@@ -89,6 +90,15 @@ class LocalPostHandlerTest {
        }
 
        @Test
+       // this scenario can happen when sones are removed.
+       fun `handler removes post from notification if sone is missing`() {
+               val post = createPost(sone = null)
+               notification.add(post)
+               eventBus.post(PostRemovedEvent(post))
+               assertThat(notification.elements, emptyIterable())
+       }
+
+       @Test
        fun `handler removes post from notification when post is marked as known`() {
                notification.add(localPost)
                notificationManager.addNotification(notification)