1 package net.pterodactylus.sone.fcp
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
12 import org.mockito.Mockito
13 import org.mockito.Mockito.verify
16 * Unit test for [DeletePostCommand].
18 class DeletePostCommandTest : SoneCommandTest() {
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)
25 fun `command requires write access`() {
26 assertThat(command.requiresWriteAccess(), equalTo(true))
30 fun `request without any parameter results in fcp exception`() {
31 requestWithoutAnyParameterResultsInFcpException()
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)
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"))
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)