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