1 package net.pterodactylus.sone.fcp
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
16 * Unit test for [CreatePostCommand].
18 class CreatePostCommandTest : SoneCommandTest() {
20 override fun createCommand(core: Core) = CreatePostCommand(core)
23 fun `command requires write access`() {
24 assertThat(command.requiresWriteAccess(), equalTo(true))
28 fun `request without any parameters results in fcp exception`() {
29 requestWithoutAnyParameterResultsInFcpException()
33 fun `request with empty Sone parameter results in fcp exception`() {
34 requestWithEmptySoneParameterResultsInFcpException()
38 fun `request with invalid Sone parameter results in fcp exception`() {
39 requestWithInvalidSoneParameterResultsInFcpException()
43 fun `request with valid remote Sone parameter results in fcp exception`() {
44 requestWithValidRemoteSoneParameterResultsInFcpException()
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()
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"))
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()
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())
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"))