1 package net.pterodactylus.sone.fcp
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
15 * Unit test for [CreatePostCommand].
17 class CreatePostCommandTest : SoneCommandTest() {
19 override fun createCommand(core: Core) = CreatePostCommand(core)
22 fun `command requires write access`() {
23 assertThat(command.requiresWriteAccess, equalTo(true))
27 fun `request without any parameters results in fcp exception`() {
28 requestWithoutAnyParameterResultsInFcpException()
32 fun `request with empty Sone parameter results in fcp exception`() {
33 requestWithEmptySoneParameterResultsInFcpException()
37 fun `request with invalid Sone parameter results in fcp exception`() {
38 requestWithInvalidSoneParameterResultsInFcpException()
42 fun `request with valid remote Sone parameter results in fcp exception`() {
43 requestWithValidRemoteSoneParameterResultsInFcpException()
47 fun `request without text results in fcp exception`() {
48 parameters += "Sone" to "LocalSoneId"
49 whenever(core.getSone("LocalSoneId")).thenReturn(localSone)
50 executeCommandAndExpectFcpException()
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"))
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()
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())
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"))