Add unit test for like post command
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / fcp / LikePostCommandTest.kt
1 package net.pterodactylus.sone.fcp
2
3 import net.pterodactylus.sone.core.Core
4 import net.pterodactylus.sone.data.Sone
5 import net.pterodactylus.sone.freenet.fcp.FcpException
6 import net.pterodactylus.sone.test.asOptional
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.Before
12 import org.junit.Test
13 import org.mockito.Mockito.verify
14
15 /**
16  * Unit test for [LikePostCommand].
17  */
18 class LikePostCommandTest : SoneCommandTest() {
19
20         private val post = createPost("PostId", mock<Sone>(),  null, 1000, "Text")
21
22         override fun createCommand(core: Core) = LikePostCommand(core)
23
24         @Before
25         fun setupPostAndSones() {
26                 whenever(core.getPost("PostId")).thenReturn(post.asOptional())
27                 whenever(core.getSone("RemoteSoneId")).thenReturn(remoteSone.asOptional())
28                 whenever(core.getSone("LocalSoneId")).thenReturn(localSone.asOptional())
29         }
30
31         @Test
32         fun `request without parameters results in FCP exception`() {
33             requestWithoutAnyParameterResultsInFcpException()
34         }
35
36         @Test
37         fun `request with invalid post id results in FCP exception`() {
38                 parameters += "Post" to "InvalidPostId"
39                 expectedException.expect(FcpException::class.java)
40                 command.execute(parameters)
41         }
42
43         @Test
44         fun `request with missing local sone results in FCP exception`() {
45             parameters += "Post" to "PostId"
46                 expectedException.expect(FcpException::class.java)
47                 command.execute(parameters)
48         }
49
50         @Test
51         fun `request with invalid sone results in FCP exception`() {
52                 parameters += "Post" to "PostId"
53                 parameters += "Sone" to "InvalidSoneId"
54                 expectedException.expect(FcpException::class.java)
55                 command.execute(parameters)
56         }
57
58         @Test
59         fun `request with valid remote sone results in FCP exception`() {
60                 parameters += "Post" to "PostId"
61                 parameters += "Sone" to "RemoteSoneId"
62                 expectedException.expect(FcpException::class.java)
63                 command.execute(parameters)
64         }
65
66         @Test
67         fun `request with valid parameters adds post to liked posts for sone`() {
68                 whenever(core.getLikes(post)).thenReturn(setOf(mock<Sone>(), mock<Sone>(), mock<Sone>()))
69                 parameters += "Post" to "PostId"
70                 parameters += "Sone" to "LocalSoneId"
71                 val replyParameters = command.execute(parameters).replyParameters
72                 assertThat(replyParameters["Message"], equalTo("PostLiked"))
73                 assertThat(replyParameters["LikeCount"], equalTo("3"))
74                 verify(localSone).addLikedPostId("PostId")
75         }
76
77 }