From 83a7b2cbdfbe26dea4a164785961acba87e00e11 Mon Sep 17 00:00:00 2001 From: kageru Date: Sun, 24 Nov 2019 14:03:45 +0100 Subject: [PATCH] Fix tests --- src/main/kotlin/moe/kageru/kagebot/Util.kt | 8 ++-- .../kotlin/moe/kageru/kagebot/ConfigTest.kt | 40 ++++++++++--------- .../kotlin/moe/kageru/kagebot/TestUtil.kt | 39 +++++++++--------- .../moe/kageru/kagebot/command/CommandTest.kt | 2 +- .../kagebot/features/WelcomeFeatureTest.kt | 8 ++-- 5 files changed, 51 insertions(+), 46 deletions(-) diff --git a/src/main/kotlin/moe/kageru/kagebot/Util.kt b/src/main/kotlin/moe/kageru/kagebot/Util.kt index acba393..c3d1643 100644 --- a/src/main/kotlin/moe/kageru/kagebot/Util.kt +++ b/src/main/kotlin/moe/kageru/kagebot/Util.kt @@ -1,11 +1,8 @@ package moe.kageru.kagebot -import arrow.core.Either -import arrow.core.ListK -import arrow.core.Option +import arrow.core.* import arrow.core.extensions.either.monad.flatMap import arrow.core.extensions.list.foldable.find -import arrow.core.firstOrNone import moe.kageru.kagebot.config.Config.server import moe.kageru.kagebot.extensions.* import org.javacord.api.entity.channel.TextChannel @@ -56,7 +53,8 @@ object Util { fun CompletableFuture.asOption(): Option { return try { - Option.just(join()) + val future = join() + if (isCompletedExceptionally) None else Option.just(future) } catch (e: CompletionException) { Option.empty() } diff --git a/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt b/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt index cf9e9a5..8aa6aef 100644 --- a/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt +++ b/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt @@ -2,7 +2,7 @@ package moe.kageru.kagebot import io.kotlintest.shouldBe import io.kotlintest.shouldNotBe -import io.kotlintest.specs.ShouldSpec +import io.kotlintest.specs.StringSpec import io.mockk.every import io.mockk.mockk import moe.kageru.kagebot.config.Config @@ -12,28 +12,30 @@ import moe.kageru.kagebot.features.SetConfigFeature import java.awt.Color @ExperimentalStdlibApi -class ConfigTest : ShouldSpec({ - TestUtil.prepareTestEnvironment() - "should properly parse test config" { - Config.system[SystemSpec.serverId] shouldNotBe null - SystemSpec.color shouldBe Color.decode("#1793d0") - Config.features.welcome!!.embed shouldNotBe null - Config.commands.size shouldBe 3 - } +class ConfigTest : StringSpec() { + init { + "should properly parse test config" { + TestUtil.prepareTestEnvironment() + Config.system[SystemSpec.serverId] shouldNotBe null + SystemSpec.color shouldBe Color.decode("#1793d0") + Config.features.welcome!!.embed shouldNotBe null + Config.commands.size shouldBe 3 + } - "should parse test config via command" { - val redir = "says" - val testConfig = """ + "should parse test config via command" { + val redir = "says" + val testConfig = """ [localization] redirectedMessage = "$redir" messageDeleted = "dongered" timeout = "timeout" """.trimIndent() - val message = TestUtil.mockMessage("anything") - every { message.messageAttachments } returns listOf(mockk { - every { url.openStream().readAllBytes() } returns testConfig.toByteArray() - }) - SetConfigFeature().handle(message) - Config.localization[LocalizationSpec.redirectedMessage] shouldBe redir + val message = TestUtil.mockMessage("anything") + every { message.messageAttachments } returns listOf(mockk { + every { url.openStream().readAllBytes() } returns testConfig.toByteArray() + }) + SetConfigFeature().handle(message) + Config.localization[LocalizationSpec.redirectedMessage] shouldBe redir + } } -}) +} diff --git a/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt b/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt index 1407579..b6040d8 100644 --- a/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt +++ b/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt @@ -85,28 +85,31 @@ object TestUtil { } every { sendMessage(capture(sentMessages)) } returns mockk(relaxed = true) } - Globals.api = mockk(relaxed = true) { - every { getServerById(any()) } returns Optional.of(mockk(relaxed = true) { - every { icon.ifPresent(any()) } just Runs - every { channelById(any()) } returns Option.just(channel) - every { channelsByName(any()) } returns ListK.just(channel) - every { rolesByName("testrole") } returns ListK.just(TEST_ROLE) - every { rolesByName("timeout") } returns ListK.just(TIMEOUT_ROLE) - every { categoriesByName(any()) } returns ListK.just(mockk()) - every { createVoiceChannelBuilder().create() } returns mockk { + // mockk tries to access Config.server in the mocking block below, so we need to provide some kind of value + Config.server = mockk() + Config.server = mockk(relaxed = true) { + every { icon.ifPresent(any()) } just Runs + every { channelById(any()) } returns Option.just(channel) + every { channelsByName(any()) } returns ListK.just(channel) + every { rolesByName("testrole") } returns ListK.just(TEST_ROLE) + every { rolesByName("timeout") } returns ListK.just(TIMEOUT_ROLE) + every { categoriesByName(any()) } returns ListK.just(mockk()) + every { createVoiceChannelBuilder().create() } returns mockk { + every { isCompletedExceptionally } returns false + every { join().idAsString } returns "12345" + } + every { getMembersByName(any()) } returns ListK.just(mockk(relaxed = true) { + every { id } returns 123 + every { roles() } returns ListK.just(TEST_ROLE) + every { getRoles(any()) } returns ListK.just(TEST_ROLE) + every { sendMessage(capture(dmEmbeds)) } returns mockk(relaxed = true) { every { isCompletedExceptionally } returns false - every { join().idAsString } returns "12345" } - every { membersByName(any()) } returns ListK.just(mockk(relaxed = true) { - every { id } returns 123 - every { roles() } returns ListK.just(TEST_ROLE) - every { sendMessage(capture(dmEmbeds)) } returns mockk(relaxed = true) { - every { isCompletedExceptionally } returns false - } - }) }) } - Config.server = Globals.api.getServerById("").get() + Globals.api = mockk(relaxed = true) { + every { getServerById(any()) } returns Optional.of(Config.server) + } ConfigParser.initialLoad("testconfig.toml") } diff --git a/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt b/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt index d9beaf0..f044d43 100644 --- a/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt +++ b/src/test/kotlin/moe/kageru/kagebot/command/CommandTest.kt @@ -303,7 +303,7 @@ class CommandTest : StringSpec({ feature = "vc" """.trimIndent() ) { - testMessageSuccess("!vc asd", "Invalid syntax, expected a number, got asd") + testMessageSuccess("!vc asd", "Invalid syntax, expected a number as limit, got asd") Dao.isTemporaryVC("12345") shouldBe false } } diff --git a/src/test/kotlin/moe/kageru/kagebot/features/WelcomeFeatureTest.kt b/src/test/kotlin/moe/kageru/kagebot/features/WelcomeFeatureTest.kt index 24047d1..dbea377 100644 --- a/src/test/kotlin/moe/kageru/kagebot/features/WelcomeFeatureTest.kt +++ b/src/test/kotlin/moe/kageru/kagebot/features/WelcomeFeatureTest.kt @@ -4,8 +4,10 @@ import io.kotlintest.shouldBe import io.kotlintest.specs.StringSpec import io.mockk.every import io.mockk.mockk +import io.mockk.verify import moe.kageru.kagebot.TestUtil import moe.kageru.kagebot.config.Config +import moe.kageru.kagebot.extensions.channelsByName import org.javacord.api.entity.message.embed.EmbedBuilder @ExperimentalStdlibApi @@ -27,8 +29,6 @@ class WelcomeFeatureTest : StringSpec({ sentMessages shouldBe mutableListOf(Config.features.welcome!!.embed) } "should send welcome fallback if DMs are disabled" { - val message = mutableListOf() - TestUtil.prepareTestEnvironment(sentMessages = message) Config.features.welcome!!.welcomeUser( mockk { every { user } returns mockk { @@ -38,9 +38,11 @@ class WelcomeFeatureTest : StringSpec({ every { join() } returns mockk() every { isCompletedExceptionally } returns true } + every { mentionTag } returns "<@123>" } } ) - message shouldBe mutableListOf("<@123> welcome") + val channel = Config.server.channelsByName("").first() + verify(exactly = 1) { channel.sendMessage("<@123> welcome") } } })