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