1 package net.pterodactylus.sone.fcp
3 import com.google.common.base.Optional.of
4 import net.pterodactylus.sone.core.Core
5 import net.pterodactylus.sone.data.Post
6 import net.pterodactylus.sone.data.PostReply
7 import net.pterodactylus.sone.freenet.fcp.FcpException
8 import net.pterodactylus.sone.test.mock
9 import net.pterodactylus.sone.test.whenever
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
15 * Unit test for [CreateReplyCommand].
17 class CreateReplyCommandTest : SoneCommandTest() {
19 private val post = mock<Post>()
21 override fun createCommand(core: Core) = CreateReplyCommand(core)
24 fun `command requires write access`() {
25 assertThat(command.requiresWriteAccess(), equalTo(true))
29 fun `request without any parameters results in fcp exception`() {
30 requestWithoutAnyParameterResultsInFcpException()
34 fun `request with empty Sone parameter results in fcp exception`() {
35 requestWithEmptySoneParameterResultsInFcpException()
39 fun `request with invalid Sone parameter results in fcp exception`() {
40 requestWithInvalidSoneParameterResultsInFcpException()
44 fun `request with valid remote Sone parameter results in fcp exception`() {
45 requestWithValidRemoteSoneParameterResultsInFcpException()
48 private fun addValidLocalSoneParameter() {
49 parameters.putSingle("Sone", "LocalSoneId")
50 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
54 fun `request without post parameter results in fcp exception`() {
55 addValidLocalSoneParameter()
56 expectedException.expect(FcpException::class.java)
57 command.execute(parameters, null, null)
61 fun `request with invalid post parameter results in fcp exception`() {
62 addValidLocalSoneParameter()
63 parameters.putSingle("Post", "InvalidPostId")
64 expectedException.expect(FcpException::class.java)
65 command.execute(parameters, null, null)
68 private fun addValidPostParameter() {
69 parameters.putSingle("Post", "ValidPostId")
70 whenever(core.getPost("ValidPostId")).thenReturn(of(post))
74 fun `request without text results in fcp exception`() {
75 addValidLocalSoneParameter()
76 addValidPostParameter()
77 expectedException.expect(FcpException::class.java)
78 command.execute(parameters, null, null)
82 fun `complete request creates reply`() {
83 addValidLocalSoneParameter()
84 addValidPostParameter()
85 parameters.putSingle("Text", "Test")
86 val postReply = mock<PostReply>().apply { whenever(id).thenReturn("ReplyId") }
87 whenever(core.createReply(localSone, post, "Test")).thenReturn(postReply)
88 val response = command.execute(parameters, null, null)
89 assertThat(response.replyParameters["Message"], equalTo("ReplyCreated"))
90 assertThat(response.replyParameters["Reply"], equalTo("ReplyId"))