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.freenet.fcp.FcpException
9 import net.pterodactylus.sone.test.mock
10 import net.pterodactylus.sone.test.whenever
11 import org.hamcrest.MatcherAssert.assertThat
12 import org.hamcrest.Matchers.equalTo
13 import org.hamcrest.Matchers.notNullValue
17 * Unit test for [CreatePostCommand].
19 class CreatePostCommandTest : SoneCommandTest() {
21 override fun createCommand(core: Core) = CreatePostCommand(core)
24 fun `command requires write access`() {
25 assertThat(command.requiresWriteAccess(), equalTo(true))
29 fun `request without any parameters results in fcp exception`() {
30 requestWithoutAnyParameterResultsInFcpException()
34 fun `request with empty Sone parameter results in fcp exception`() {
35 requestWithEmptySoneParameterResultsInFcpException()
39 fun `request with invalid Sone parameter results in fcp exception`() {
40 requestWithInvalidSoneParameterResultsInFcpException()
44 fun `request with valid remote Sone parameter results in fcp exception`() {
45 requestWithValidRemoteSoneParameterResultsInFcpException()
49 fun `request without text results in fcp exception`() {
50 parameters.putSingle("Sone", "LocalSoneId")
51 whenever(core.getSone("LocalSoneId")).thenReturn(Optional.of(localSone))
52 expectedException.expect(FcpException::class.java)
53 command.execute(parameters, null, null)
57 fun `request with text creates post`() {
58 parameters.putSingle("Sone", "LocalSoneId")
59 parameters.putSingle("Text", "Test")
60 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
61 val post = mock<Post>().apply { whenever(id).thenReturn("PostId") }
62 whenever(core.createPost(localSone, absent(), "Test")).thenReturn(post)
63 val response = command.execute(parameters, null, null)
64 assertThat(response.replyParameters.get("Message"), equalTo("PostCreated"))
65 assertThat(response.replyParameters.get("Post"), equalTo("PostId"))
69 fun `request with invalid recipient results in fcp exception`() {
70 parameters.putSingle("Sone", "LocalSoneId")
71 parameters.putSingle("Text", "Test")
72 parameters.putSingle("Recipient", "InvalidSoneId")
73 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
74 expectedException.expect(FcpException::class.java)
75 command.execute(parameters, null, null)
79 fun `request with recipient the same as the sender returns an error response`() {
80 parameters.putSingle("Sone", "LocalSoneId")
81 parameters.putSingle("Text", "Test")
82 parameters.putSingle("Recipient", "LocalSoneId")
83 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
84 val response = command.execute(parameters, null, null)
85 assertThat(response.replyParameters["Message"], equalTo("Error"))
86 assertThat(response.replyParameters["ErrorMessage"], notNullValue())
90 fun `request with text and recipient creates post`() {
91 parameters.putSingle("Sone", "LocalSoneId")
92 parameters.putSingle("Text", "Test")
93 parameters.putSingle("Recipient", "RemoteSoneId")
94 whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
95 whenever(core.getSone("RemoteSoneId")).thenReturn(of(remoteSone))
96 val post = mock<Post>().apply { whenever(id).thenReturn("PostId") }
97 whenever(core.createPost(localSone, of(remoteSone), "Test")).thenReturn(post)
98 val response = command.execute(parameters, null, null)
99 assertThat(response.replyParameters.get("Message"), equalTo("PostCreated"))
100 assertThat(response.replyParameters.get("Post"), equalTo("PostId"))