Fix tests

This commit is contained in:
kageru 2019-11-24 14:03:45 +01:00
parent a5bc947d27
commit 83a7b2cbdf
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
5 changed files with 51 additions and 46 deletions

View File

@ -1,11 +1,8 @@
package moe.kageru.kagebot package moe.kageru.kagebot
import arrow.core.Either import arrow.core.*
import arrow.core.ListK
import arrow.core.Option
import arrow.core.extensions.either.monad.flatMap import arrow.core.extensions.either.monad.flatMap
import arrow.core.extensions.list.foldable.find import arrow.core.extensions.list.foldable.find
import arrow.core.firstOrNone
import moe.kageru.kagebot.config.Config.server import moe.kageru.kagebot.config.Config.server
import moe.kageru.kagebot.extensions.* import moe.kageru.kagebot.extensions.*
import org.javacord.api.entity.channel.TextChannel import org.javacord.api.entity.channel.TextChannel
@ -56,7 +53,8 @@ object Util {
fun <T> CompletableFuture<T>.asOption(): Option<T> { fun <T> CompletableFuture<T>.asOption(): Option<T> {
return try { return try {
Option.just(join()) val future = join()
if (isCompletedExceptionally) None else Option.just(future)
} catch (e: CompletionException) { } catch (e: CompletionException) {
Option.empty() Option.empty()
} }

View File

@ -2,7 +2,7 @@ package moe.kageru.kagebot
import io.kotlintest.shouldBe import io.kotlintest.shouldBe
import io.kotlintest.shouldNotBe import io.kotlintest.shouldNotBe
import io.kotlintest.specs.ShouldSpec import io.kotlintest.specs.StringSpec
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import moe.kageru.kagebot.config.Config import moe.kageru.kagebot.config.Config
@ -12,28 +12,30 @@ import moe.kageru.kagebot.features.SetConfigFeature
import java.awt.Color import java.awt.Color
@ExperimentalStdlibApi @ExperimentalStdlibApi
class ConfigTest : ShouldSpec({ class ConfigTest : StringSpec() {
TestUtil.prepareTestEnvironment() init {
"should properly parse test config" { "should properly parse test config" {
Config.system[SystemSpec.serverId] shouldNotBe null TestUtil.prepareTestEnvironment()
SystemSpec.color shouldBe Color.decode("#1793d0") Config.system[SystemSpec.serverId] shouldNotBe null
Config.features.welcome!!.embed shouldNotBe null SystemSpec.color shouldBe Color.decode("#1793d0")
Config.commands.size shouldBe 3 Config.features.welcome!!.embed shouldNotBe null
} Config.commands.size shouldBe 3
}
"should parse test config via command" { "should parse test config via command" {
val redir = "says" val redir = "says"
val testConfig = """ val testConfig = """
[localization] [localization]
redirectedMessage = "$redir" redirectedMessage = "$redir"
messageDeleted = "dongered" messageDeleted = "dongered"
timeout = "timeout" timeout = "timeout"
""".trimIndent() """.trimIndent()
val message = TestUtil.mockMessage("anything") val message = TestUtil.mockMessage("anything")
every { message.messageAttachments } returns listOf(mockk { every { message.messageAttachments } returns listOf(mockk {
every { url.openStream().readAllBytes() } returns testConfig.toByteArray() every { url.openStream().readAllBytes() } returns testConfig.toByteArray()
}) })
SetConfigFeature().handle(message) SetConfigFeature().handle(message)
Config.localization[LocalizationSpec.redirectedMessage] shouldBe redir Config.localization[LocalizationSpec.redirectedMessage] shouldBe redir
}
} }
}) }

View File

@ -85,28 +85,31 @@ object TestUtil {
} }
every { sendMessage(capture(sentMessages)) } returns mockk(relaxed = true) every { sendMessage(capture(sentMessages)) } returns mockk(relaxed = true)
} }
Globals.api = mockk(relaxed = true) { // mockk tries to access Config.server in the mocking block below, so we need to provide some kind of value
every { getServerById(any<String>()) } returns Optional.of(mockk(relaxed = true) { Config.server = mockk()
every { icon.ifPresent(any()) } just Runs Config.server = mockk(relaxed = true) {
every { channelById(any()) } returns Option.just(channel) every { icon.ifPresent(any()) } just Runs
every { channelsByName(any()) } returns ListK.just(channel) every { channelById(any()) } returns Option.just(channel)
every { rolesByName("testrole") } returns ListK.just(TEST_ROLE) every { channelsByName(any()) } returns ListK.just(channel)
every { rolesByName("timeout") } returns ListK.just(TIMEOUT_ROLE) every { rolesByName("testrole") } returns ListK.just(TEST_ROLE)
every { categoriesByName(any()) } returns ListK.just(mockk()) every { rolesByName("timeout") } returns ListK.just(TIMEOUT_ROLE)
every { createVoiceChannelBuilder().create() } returns mockk { 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 { 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<String>()) } returns Optional.of(Config.server)
}
ConfigParser.initialLoad("testconfig.toml") ConfigParser.initialLoad("testconfig.toml")
} }

View File

@ -303,7 +303,7 @@ class CommandTest : StringSpec({
feature = "vc" feature = "vc"
""".trimIndent() """.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 Dao.isTemporaryVC("12345") shouldBe false
} }
} }

View File

@ -4,8 +4,10 @@ import io.kotlintest.shouldBe
import io.kotlintest.specs.StringSpec import io.kotlintest.specs.StringSpec
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify
import moe.kageru.kagebot.TestUtil import moe.kageru.kagebot.TestUtil
import moe.kageru.kagebot.config.Config import moe.kageru.kagebot.config.Config
import moe.kageru.kagebot.extensions.channelsByName
import org.javacord.api.entity.message.embed.EmbedBuilder import org.javacord.api.entity.message.embed.EmbedBuilder
@ExperimentalStdlibApi @ExperimentalStdlibApi
@ -27,8 +29,6 @@ class WelcomeFeatureTest : StringSpec({
sentMessages shouldBe mutableListOf(Config.features.welcome!!.embed) sentMessages shouldBe mutableListOf(Config.features.welcome!!.embed)
} }
"should send welcome fallback if DMs are disabled" { "should send welcome fallback if DMs are disabled" {
val message = mutableListOf<String>()
TestUtil.prepareTestEnvironment(sentMessages = message)
Config.features.welcome!!.welcomeUser( Config.features.welcome!!.welcomeUser(
mockk { mockk {
every { user } returns mockk { every { user } returns mockk {
@ -38,9 +38,11 @@ class WelcomeFeatureTest : StringSpec({
every { join() } returns mockk() every { join() } returns mockk()
every { isCompletedExceptionally } returns true 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") }
} }
}) })