🚚 Rename local-sone-mentioned event
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / text / SoneMentionDetectorTest.kt
index c319809..a56e5b5 100644 (file)
@@ -17,6 +17,8 @@
 
 package net.pterodactylus.sone.text
 
+import com.google.common.base.*
+import com.google.common.base.Optional.*
 import com.google.common.eventbus.*
 import net.pterodactylus.sone.core.event.*
 import net.pterodactylus.sone.data.*
@@ -35,14 +37,14 @@ class SoneMentionDetectorTest {
        private val soneProvider = TestSoneProvider()
        private val postProvider = TestPostProvider()
        private val soneTextParser = SoneTextParser(soneProvider, postProvider)
-       private val capturedEvents = mutableListOf<LocalSoneMentionedInPostEvent>()
+       private val capturedEvents = mutableListOf<MentionOfLocalSoneFoundEvent>()
 
        init {
                eventBus.register(SoneMentionDetector(eventBus, soneTextParser))
                eventBus.register(object : Any() {
                        @Subscribe
-                       fun captureEvent(localSoneMentionedInPostEvent: LocalSoneMentionedInPostEvent) {
-                               capturedEvents += localSoneMentionedInPostEvent
+                       fun captureEvent(mentionOfLocalSoneFoundEvent: MentionOfLocalSoneFoundEvent) {
+                               capturedEvents += mentionOfLocalSoneFoundEvent
                        }
                })
        }
@@ -65,21 +67,21 @@ class SoneMentionDetectorTest {
        fun `detector emits event on post that contains links to a remote and a local sone`() {
                val post = createPost("text mentions sone://${localSone1.id} and sone://${remoteSone2.id}.")
                eventBus.post(NewPostFoundEvent(post))
-               assertThat(capturedEvents, contains(LocalSoneMentionedInPostEvent(post)))
+               assertThat(capturedEvents, contains(MentionOfLocalSoneFoundEvent(post)))
        }
 
        @Test
        fun `detector emits one event on post that contains two links to the same local sone`() {
                val post = createPost("text mentions sone://${localSone1.id} and sone://${localSone1.id}.")
                eventBus.post(NewPostFoundEvent(post))
-               assertThat(capturedEvents, contains(LocalSoneMentionedInPostEvent(post)))
+               assertThat(capturedEvents, contains(MentionOfLocalSoneFoundEvent(post)))
        }
 
        @Test
        fun `detector emits one event on post that contains links to two local sones`() {
                val post = createPost("text mentions sone://${localSone1.id} and sone://${localSone2.id}.")
                eventBus.post(NewPostFoundEvent(post))
-               assertThat(capturedEvents, contains(LocalSoneMentionedInPostEvent(post)))
+               assertThat(capturedEvents, contains(MentionOfLocalSoneFoundEvent(post)))
        }
 
        @Test
@@ -89,6 +91,51 @@ class SoneMentionDetectorTest {
                assertThat(capturedEvents, emptyIterable())
        }
 
+       @Test
+       fun `detector does not emit event for reply that contains no sones`() {
+               val reply = emptyPostReply()
+               eventBus.post(NewPostReplyFoundEvent(reply))
+               assertThat(capturedEvents, emptyIterable())
+       }
+
+       @Test
+       fun `detector does not emit event for reply that contains two links to remote sones`() {
+               val reply = emptyPostReply("text mentions sone://${remoteSone1.id} and sone://${remoteSone2.id}.")
+               eventBus.post(NewPostReplyFoundEvent(reply))
+               assertThat(capturedEvents, emptyIterable())
+       }
+
+       @Test
+       fun `detector emits event on reply that contains links to a remote and a local sone`() {
+               val post = createPost()
+               val reply = emptyPostReply("text mentions sone://${remoteSone1.id} and sone://${localSone1.id}.", post)
+               eventBus.post(NewPostReplyFoundEvent(reply))
+               assertThat(capturedEvents, contains(MentionOfLocalSoneFoundEvent(post)))
+       }
+
+       @Test
+       fun `detector emits one event on reply that contains two links to the same local sone`() {
+               val post = createPost()
+               val reply = emptyPostReply("text mentions sone://${localSone1.id} and sone://${localSone1.id}.", post)
+               eventBus.post(NewPostReplyFoundEvent(reply))
+               assertThat(capturedEvents, contains(MentionOfLocalSoneFoundEvent(post)))
+       }
+
+       @Test
+       fun `detector emits one event on reply that contains two links to local sones`() {
+               val post = createPost()
+               val reply = emptyPostReply("text mentions sone://${localSone1.id} and sone://${localSone2.id}.", post)
+               eventBus.post(NewPostReplyFoundEvent(reply))
+               assertThat(capturedEvents, contains(MentionOfLocalSoneFoundEvent(post)))
+       }
+
+       @Test
+       fun `detector does not emit event for reply by local sone`() {
+               val reply = emptyPostReply("text mentions sone://${localSone1.id} and sone://${localSone2.id}.", sone = localSone1)
+               eventBus.post(NewPostReplyFoundEvent(reply))
+               assertThat(capturedEvents, emptyIterable())
+       }
+
 }
 
 private val remoteSone1 = createRemoteSone()
@@ -122,3 +169,14 @@ private class TestPostProvider : PostProvider {
        override fun getDirectedPosts(recipientId: String): Collection<Post> = emptyList()
 
 }
+
+private fun emptyPostReply(text: String = "", post: Post = createPost(), sone: Sone = remoteSone1) = object : PostReply {
+       override val id = "reply-id"
+       override fun getSone() = sone
+       override fun getPostId() = post.id
+       override fun getPost(): Optional<Post> = of(post)
+       override fun getTime() = 1L
+       override fun getText() = text
+       override fun isKnown() = false
+       override fun setKnown(known: Boolean): PostReply = this
+}