From 3fd802682bd3dd5620f3bbc4ee065ad733d2f7cf Mon Sep 17 00:00:00 2001 From: kageru Date: Sat, 8 Jun 2019 21:52:47 +0200 Subject: [PATCH] add unit tests --- build.gradle.kts | 9 ++++++- .../kotlin/moe/kageru/kagebot/CommandTest.kt | 26 +++++++++++++++++++ .../kotlin/moe/kageru/kagebot/ConfigTest.kt | 8 ++++++ .../kotlin/moe/kageru/kagebot/TestUtil.kt | 13 ++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4b5c288..c5d99db 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,10 +20,17 @@ repositories { mavenCentral() } +val test by tasks.getting(Test::class) { + useJUnitPlatform { } +} + dependencies { + compile("com.moandjiezana.toml:toml4j:0.7.2") implementation(kotlin("stdlib-jdk8")) implementation("org.javacord:javacord:3.0.4") - compile("com.moandjiezana.toml:toml4j:0.7.2") + + testImplementation("io.kotlintest:kotlintest-runner-junit5:3.3.2") + testImplementation("io.mockk:mockk:1.9") } tasks.withType { diff --git a/src/test/kotlin/moe/kageru/kagebot/CommandTest.kt b/src/test/kotlin/moe/kageru/kagebot/CommandTest.kt index e98fa3a..f9bdda1 100644 --- a/src/test/kotlin/moe/kageru/kagebot/CommandTest.kt +++ b/src/test/kotlin/moe/kageru/kagebot/CommandTest.kt @@ -1,2 +1,28 @@ package moe.kageru.kagebot +import io.kotlintest.shouldBe +import io.kotlintest.specs.StringSpec + +class CommandTest : StringSpec({ + "should match prefix command" { + testMessage("!ping", "pong") + } + "should match contains command" { + testMessage("the trigger is somewhere in this message", "found it") + } + "should match regex command" { + testMessage("AcsdB", "regex matched") + } + "should ping author" { + testMessage("answer me", "<@1> there you go") + } +}) { + companion object { + fun testMessage(content: String, result: String) { + val calls = mutableListOf() + Kagebot.processMessage(TestUtil.mockMessage(content, capturedCalls = calls)) + calls.size shouldBe 1 + calls[0] shouldBe result + } + } +} \ No newline at end of file diff --git a/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt b/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt index e98fa3a..36fd025 100644 --- a/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt +++ b/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt @@ -1,2 +1,10 @@ package moe.kageru.kagebot +import io.kotlintest.shouldNotBe +import io.kotlintest.specs.StringSpec + +class ConfigTest : StringSpec({ + "should properly parse default config" { + Config.config shouldNotBe null + } +}) \ No newline at end of file diff --git a/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt b/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt index e98fa3a..c3a3a27 100644 --- a/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt +++ b/src/test/kotlin/moe/kageru/kagebot/TestUtil.kt @@ -1,2 +1,15 @@ package moe.kageru.kagebot +import io.mockk.every +import io.mockk.mockk +import org.javacord.api.event.message.MessageCreateEvent + +object TestUtil { + fun mockMessage(content: String, author: Long = 1, capturedCalls: MutableList = mutableListOf()): MessageCreateEvent { + val message = mockk() + every { message.messageContent } returns content + every { message.messageAuthor.id } returns author + every { message.channel.sendMessage(capture(capturedCalls)) } returns mockk() + return message + } +} \ No newline at end of file