Add unit test for delete post command and actually delete the post
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / fcp / DeletePostCommandTest.kt
1 package net.pterodactylus.sone.fcp
2
3 import com.google.common.base.Optional.of
4 import net.pterodactylus.sone.core.Core
5 import net.pterodactylus.sone.data.Post
6 import net.pterodactylus.sone.freenet.fcp.FcpException
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.junit.Test
12 import org.mockito.Mockito
13 import org.mockito.Mockito.verify
14
15 /**
16  * Unit test for [DeletePostCommand].
17  */
18 class DeletePostCommandTest : SoneCommandTest() {
19
20         private val postFromRemoteSone = mock<Post>().apply { whenever(sone).thenReturn(remoteSone) }
21         private val postFromLocalSone = mock<Post>().apply { whenever(sone).thenReturn(localSone) }
22         override fun createCommand(core: Core) = DeletePostCommand(core)
23
24         @Test
25         fun `command requires write access`() {
26                 assertThat(command.requiresWriteAccess(), equalTo(true))
27         }
28
29         @Test
30         fun `request without any parameter results in fcp exception`() {
31                 requestWithoutAnyParameterResultsInFcpException()
32         }
33
34         @Test
35         fun `request with invalid post parameter results in fcp exception`() {
36                 parameters.putSingle("Post", "InvalidPostId")
37                 expectedException.expect(FcpException::class.java)
38                 command.execute(parameters, null, null)
39         }
40
41         @Test
42         fun `request with post from remote sone returns error response`() {
43                 parameters.putSingle("Post", "RemotePostId")
44                 whenever(core.getPost("RemotePostId")).thenReturn(of(postFromRemoteSone))
45                 val response = command.execute(parameters, null, null)
46                 assertThat(response.replyParameters["Message"], equalTo("Error"))
47                 assertThat(response.replyParameters["ErrorCode"], equalTo("401"))
48         }
49
50         @Test
51         fun `request with post from local sone deletes posts`() {
52                 parameters.putSingle("Post", "LocalPostId")
53                 whenever(core.getPost("LocalPostId")).thenReturn(of(postFromLocalSone))
54                 val response = command.execute(parameters, null, null)
55                 assertThat(response.replyParameters["Message"], equalTo("PostDeleted"))
56                 verify(core).deletePost(postFromLocalSone)
57         }
58
59 }