Merge branch 'release-0.9.7'
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / fcp / CreatePostCommandTest.kt
1 package net.pterodactylus.sone.fcp
2
3 import com.google.common.base.Optional
4 import com.google.common.base.Optional.absent
5 import com.google.common.base.Optional.of
6 import net.pterodactylus.sone.core.Core
7 import net.pterodactylus.sone.data.Post
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.hamcrest.Matchers.notNullValue
13 import org.junit.Test
14
15 /**
16  * Unit test for [CreatePostCommand].
17  */
18 class CreatePostCommandTest : SoneCommandTest() {
19
20         override fun createCommand(core: Core) = CreatePostCommand(core)
21
22         @Test
23         fun `command requires write access`() {
24                 assertThat(command.requiresWriteAccess(), equalTo(true))
25         }
26
27         @Test
28         fun `request without any parameters results in fcp exception`() {
29                 requestWithoutAnyParameterResultsInFcpException()
30         }
31
32         @Test
33         fun `request with empty Sone parameter results in fcp exception`() {
34             requestWithEmptySoneParameterResultsInFcpException()
35         }
36
37         @Test
38         fun `request with invalid Sone parameter results in fcp exception`() {
39                 requestWithInvalidSoneParameterResultsInFcpException()
40         }
41
42         @Test
43         fun `request with valid remote Sone parameter results in fcp exception`() {
44                 requestWithValidRemoteSoneParameterResultsInFcpException()
45         }
46
47         @Test
48         fun `request without text results in fcp exception`() {
49                 parameters += "Sone" to "LocalSoneId"
50                 whenever(core.getSone("LocalSoneId")).thenReturn(Optional.of(localSone))
51                 executeCommandAndExpectFcpException()
52         }
53
54         @Test
55         fun `request with text creates post`() {
56                 parameters += "Sone" to "LocalSoneId"
57                 parameters += "Text" to "Test"
58                 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
59                 val post = mock<Post>().apply { whenever(id).thenReturn("PostId") }
60                 whenever(core.createPost(localSone, absent(), "Test")).thenReturn(post)
61                 val response = command.execute(parameters)
62                 assertThat(response.replyParameters.get("Message"), equalTo("PostCreated"))
63                 assertThat(response.replyParameters.get("Post"), equalTo("PostId"))
64         }
65
66         @Test
67         fun `request with invalid recipient results in fcp exception`() {
68                 parameters += "Sone" to "LocalSoneId"
69                 parameters += "Text" to "Test"
70                 parameters += "Recipient" to "InvalidSoneId"
71                 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
72                 executeCommandAndExpectFcpException()
73         }
74
75         @Test
76         fun `request with recipient the same as the sender returns an error response`() {
77                 parameters += "Sone" to "LocalSoneId"
78                 parameters += "Text" to "Test"
79                 parameters += "Recipient" to "LocalSoneId"
80                 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
81                 val response = command.execute(parameters)
82                 assertThat(response.replyParameters["Message"], equalTo("Error"))
83                 assertThat(response.replyParameters["ErrorMessage"], notNullValue())
84         }
85
86         @Test
87         fun `request with text and recipient creates post`() {
88                 parameters += "Sone" to "LocalSoneId"
89                 parameters += "Text" to "Test"
90                 parameters += "Recipient" to "RemoteSoneId"
91                 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
92                 whenever(core.getSone("RemoteSoneId")).thenReturn(of(remoteSone))
93                 val post = mock<Post>().apply { whenever(id).thenReturn("PostId") }
94                 whenever(core.createPost(localSone, of(remoteSone), "Test")).thenReturn(post)
95                 val response = command.execute(parameters)
96                 assertThat(response.replyParameters.get("Message"), equalTo("PostCreated"))
97                 assertThat(response.replyParameters.get("Post"), equalTo("PostId"))
98         }
99
100 }