X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftext%2FSoneMentionDetectorTest.kt;h=a56e5b5b20c34218a9f95e33ad327c74dead1f0f;hb=0a2f92314bc1f78a6dea24dc353dd8ad3b041cb9;hp=c319809871bdc9fd5f68cdcfbb6420c868a5dadb;hpb=339671a5532a02cfbc25269b8ac3f13fc6a09295;p=Sone.git diff --git a/src/test/kotlin/net/pterodactylus/sone/text/SoneMentionDetectorTest.kt b/src/test/kotlin/net/pterodactylus/sone/text/SoneMentionDetectorTest.kt index c319809..a56e5b5 100644 --- a/src/test/kotlin/net/pterodactylus/sone/text/SoneMentionDetectorTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/text/SoneMentionDetectorTest.kt @@ -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() + private val capturedEvents = mutableListOf() 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 = 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 = of(post) + override fun getTime() = 1L + override fun getText() = text + override fun isKnown() = false + override fun setKnown(known: Boolean): PostReply = this +}