make mocks nicer

This commit is contained in:
kageru 2019-06-10 08:32:18 +02:00
parent 18ea000b9d
commit 1da7800f3d
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2

View File

@ -8,10 +8,7 @@ import io.mockk.mockk
import io.mockk.verify
import moe.kageru.kagebot.Config.Companion.config
import org.javacord.api.entity.message.embed.EmbedBuilder
import org.javacord.api.entity.permission.Role
import org.javacord.api.entity.user.User
import org.javacord.core.entity.message.embed.EmbedBuilderDelegateImpl
import java.util.*
class CommandTest : StringSpec({
TestUtil.prepareServerConfig()
@ -40,11 +37,11 @@ class CommandTest : StringSpec({
}
"should refuse command without permissions" {
val calls = mutableListOf<String>()
val mockOptional = mockk<Optional<User>>()
every { mockOptional.get().getRoles(any()) } returns emptyList()
every { mockOptional.isPresent } returns true
val mockMessage = TestUtil.mockMessage("!restricted", capturedCalls = calls)
every { mockMessage.messageAuthor.asUser() } returns mockOptional
every { mockMessage.messageAuthor.asUser() } returns mockk {
every { get().getRoles(any()) } returns emptyList()
every { isPresent } returns true
}
Kagebot.processMessage(mockMessage)
calls.size shouldBe 1
calls[0] shouldBe config.localization.permissionDenied
@ -59,17 +56,21 @@ class CommandTest : StringSpec({
}
"should accept restricted command with permissions" {
val calls = mutableListOf<String>()
val mockRole = mockk<Role>()
every { mockRole.id } returns 452034011393425409
val mockOptional = mockk<Optional<User>>()
every { mockOptional.isPresent } returns true
every { mockOptional.get().getRoles(any()) } returns listOf(mockRole)
val mockMessage = TestUtil.mockMessage("!restricted", capturedCalls = calls)
every { mockMessage.messageAuthor.asUser() } returns mockOptional
every { mockMessage.messageAuthor.asUser() } returns mockk {
every { isPresent } returns true
every { get().getRoles(any()) } returns listOf(
mockk { every { id } returns 452034011393425409 }
)
}
Kagebot.processMessage(mockMessage)
calls.size shouldBe 1
calls[0] shouldBe "access granted"
}
/*
* This implicitly tests that the message author is not included in anonymous complaints
* because getting the authors name from the mock is undefined.
*/
"should redirect" {
val calls = mutableListOf<EmbedBuilder>()
TestUtil.prepareServerConfig(calls)
@ -77,7 +78,9 @@ class CommandTest : StringSpec({
Kagebot.processMessage(TestUtil.mockMessage("!anonRedirect $message"))
calls.size shouldBe 1
val delegateImpl = calls[0].delegate as EmbedBuilderDelegateImpl
delegateImpl.toJsonNode().toString() shouldContain "\"$message\""
val embedContent = delegateImpl.toJsonNode().toString()
embedContent shouldContain "\"$message\""
}
}) {
companion object {