X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Ftext%2FSoneMentionDetectorTest.kt;h=1c08480feafda978a4f13329aef4afe0d85deda9;hb=5076d8379e6413189273defd4f01f241b4a6a57e;hp=6ae437bd44f86bf3926651b72b7d68417b10a555;hpb=6116ab8aa248eab6a4d800f991e749debc496df9;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 6ae437b..1c08480 100644 --- a/src/test/kotlin/net/pterodactylus/sone/text/SoneMentionDetectorTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/text/SoneMentionDetectorTest.kt @@ -1,5 +1,5 @@ /** - * Sone - SoneMentionDetectorTest.kt - Copyright © 2019 David ‘Bombe’ Roden + * Sone - SoneMentionDetectorTest.kt - Copyright © 2019–2020 David ‘Bombe’ Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,7 +32,8 @@ import kotlin.test.* @Suppress("UnstableApiUsage") class SoneMentionDetectorTest { - private val eventBus = EventBus() + private val caughtExceptions = mutableListOf() + private val eventBus = EventBus { exception, _ -> caughtExceptions += exception } private val soneProvider = TestSoneProvider() private val postProvider = TestPostProvider() private val soneTextParser = SoneTextParser(soneProvider, postProvider) @@ -99,14 +100,14 @@ class SoneMentionDetectorTest { @Test fun `detector does not emit event for reply that contains no sones`() { - val reply = emptyPostReply() + val reply = createPostReply() eventBus.post(NewPostReplyFoundEvent(reply)) assertThat(capturedFoundEvents, 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}.") + val reply = createPostReply("text mentions sone://${remoteSone1.id} and sone://${remoteSone2.id}.") eventBus.post(NewPostReplyFoundEvent(reply)) assertThat(capturedFoundEvents, emptyIterable()) } @@ -114,7 +115,7 @@ class SoneMentionDetectorTest { @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) + val reply = createPostReply("text mentions sone://${remoteSone1.id} and sone://${localSone1.id}.", post) eventBus.post(NewPostReplyFoundEvent(reply)) assertThat(capturedFoundEvents, contains(MentionOfLocalSoneFoundEvent(post))) } @@ -122,7 +123,7 @@ class SoneMentionDetectorTest { @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) + val reply = createPostReply("text mentions sone://${localSone1.id} and sone://${localSone1.id}.", post) eventBus.post(NewPostReplyFoundEvent(reply)) assertThat(capturedFoundEvents, contains(MentionOfLocalSoneFoundEvent(post))) } @@ -130,19 +131,27 @@ class SoneMentionDetectorTest { @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) + val reply = createPostReply("text mentions sone://${localSone1.id} and sone://${localSone2.id}.", post) eventBus.post(NewPostReplyFoundEvent(reply)) assertThat(capturedFoundEvents, 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) + val reply = createPostReply("text mentions sone://${localSone1.id} and sone://${localSone2.id}.", sone = localSone1) eventBus.post(NewPostReplyFoundEvent(reply)) assertThat(capturedFoundEvents, emptyIterable()) } @Test + fun `detector does not emit event for reply without post`() { + val reply = createPostReply("text mentions sone://${localSone1.id} and sone://${localSone2.id}.", post = null) + eventBus.post(NewPostReplyFoundEvent(reply)) + assertThat(caughtExceptions, emptyIterable()) + assertThat(capturedFoundEvents, emptyIterable()) + } + + @Test fun `detector does not emit removed event when a post without mention is removed`() { val post = createPost() eventBus.post(PostRemovedEvent(post)) @@ -175,7 +184,7 @@ class SoneMentionDetectorTest { @Test fun `detector does emit removed event when reply with mention is removed and no more mentions in that post exist`() { val post = createPost() - val reply = emptyPostReply("sone://${localSone1.id}", post) + val reply = createPostReply("sone://${localSone1.id}", post) postReplyProvider.postReplies[post.id] = listOf(reply) eventBus.post(NewPostReplyFoundEvent(reply)) eventBus.post(PostReplyRemovedEvent(reply)) @@ -185,7 +194,7 @@ class SoneMentionDetectorTest { @Test fun `detector does not emit removed event when reply with mention is removed and post mentions local sone`() { val post = createPost("sone://${localSone1.id}") - val reply = emptyPostReply("sone://${localSone1.id}", post) + val reply = createPostReply("sone://${localSone1.id}", post) eventBus.post(NewPostReplyFoundEvent(reply)) eventBus.post(PostReplyRemovedEvent(reply)) assertThat(capturedRemovedEvents, emptyIterable()) @@ -194,7 +203,7 @@ class SoneMentionDetectorTest { @Test fun `detector does emit removed event when reply with mention is removed and post mentions local sone but is known`() { val post = createPost("sone://${localSone1.id}", known = true) - val reply = emptyPostReply("sone://${localSone1.id}", post) + val reply = createPostReply("sone://${localSone1.id}", post) eventBus.post(NewPostReplyFoundEvent(reply)) eventBus.post(PostReplyRemovedEvent(reply)) assertThat(capturedRemovedEvents, contains(MentionOfLocalSoneRemovedEvent(post))) @@ -203,8 +212,8 @@ class SoneMentionDetectorTest { @Test fun `detector does not emit removed event when reply with mention is removed and post has other replies with mentions`() { val post = createPost() - val reply1 = emptyPostReply("sone://${localSone1.id}", post) - val reply2 = emptyPostReply("sone://${localSone1.id}", post) + val reply1 = createPostReply("sone://${localSone1.id}", post) + val reply2 = createPostReply("sone://${localSone1.id}", post) postReplyProvider.postReplies[post.id] = listOf(reply1, reply2) eventBus.post(NewPostReplyFoundEvent(reply1)) eventBus.post(PostReplyRemovedEvent(reply1)) @@ -214,8 +223,8 @@ class SoneMentionDetectorTest { @Test fun `detector does emit removed event when reply with mention is removed and post has other replies with mentions which are known`() { val post = createPost() - val reply1 = emptyPostReply("sone://${localSone1.id}", post) - val reply2 = emptyPostReply("sone://${localSone1.id}", post, known = true) + val reply1 = createPostReply("sone://${localSone1.id}", post) + val reply2 = createPostReply("sone://${localSone1.id}", post, known = true) postReplyProvider.postReplies[post.id] = listOf(reply1, reply2) eventBus.post(NewPostReplyFoundEvent(reply1)) eventBus.post(PostReplyRemovedEvent(reply1))