Add unit test for create reply command
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / fcp / CreateReplyCommandTest.kt
1 package net.pterodactylus.sone.fcp
2
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
12 import org.junit.Test
13
14 /**
15  * Unit test for [CreateReplyCommand].
16  */
17 class CreateReplyCommandTest : SoneCommandTest() {
18
19         private val post = mock<Post>()
20
21         override fun createCommand(core: Core) = CreateReplyCommand(core)
22
23         @Test
24         fun `command requires write access`() {
25                 assertThat(command.requiresWriteAccess(), equalTo(true))
26         }
27
28         @Test
29         fun `request without any parameters results in fcp exception`() {
30                 requestWithoutAnyParameterResultsInFcpException()
31         }
32
33         @Test
34         fun `request with empty Sone parameter results in fcp exception`() {
35                 requestWithEmptySoneParameterResultsInFcpException()
36         }
37
38         @Test
39         fun `request with invalid Sone parameter results in fcp exception`() {
40                 requestWithInvalidSoneParameterResultsInFcpException()
41         }
42
43         @Test
44         fun `request with valid remote Sone parameter results in fcp exception`() {
45                 requestWithValidRemoteSoneParameterResultsInFcpException()
46         }
47
48         private fun addValidLocalSoneParameter() {
49                 parameters.putSingle("Sone", "LocalSoneId")
50                 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
51         }
52
53         @Test
54         fun `request without post parameter results in fcp exception`() {
55                 addValidLocalSoneParameter()
56                 expectedException.expect(FcpException::class.java)
57                 command.execute(parameters, null, null)
58         }
59
60         @Test
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)
66         }
67
68         private fun addValidPostParameter() {
69                 parameters.putSingle("Post", "ValidPostId")
70                 whenever(core.getPost("ValidPostId")).thenReturn(of(post))
71         }
72
73         @Test
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)
79         }
80
81         @Test
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"))
91         }
92
93 }