Add unit test for like post command
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 15 Jan 2017 09:12:04 +0000 (10:12 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 15 Jan 2017 09:12:58 +0000 (10:12 +0100)
src/test/kotlin/net/pterodactylus/sone/fcp/LikePostCommandTest.kt [new file with mode: 0644]

diff --git a/src/test/kotlin/net/pterodactylus/sone/fcp/LikePostCommandTest.kt b/src/test/kotlin/net/pterodactylus/sone/fcp/LikePostCommandTest.kt
new file mode 100644 (file)
index 0000000..f88e138
--- /dev/null
@@ -0,0 +1,77 @@
+package net.pterodactylus.sone.fcp
+
+import net.pterodactylus.sone.core.Core
+import net.pterodactylus.sone.data.Sone
+import net.pterodactylus.sone.freenet.fcp.FcpException
+import net.pterodactylus.sone.test.asOptional
+import net.pterodactylus.sone.test.mock
+import net.pterodactylus.sone.test.whenever
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.equalTo
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito.verify
+
+/**
+ * Unit test for [LikePostCommand].
+ */
+class LikePostCommandTest : SoneCommandTest() {
+
+       private val post = createPost("PostId", mock<Sone>(),  null, 1000, "Text")
+
+       override fun createCommand(core: Core) = LikePostCommand(core)
+
+       @Before
+       fun setupPostAndSones() {
+               whenever(core.getPost("PostId")).thenReturn(post.asOptional())
+               whenever(core.getSone("RemoteSoneId")).thenReturn(remoteSone.asOptional())
+               whenever(core.getSone("LocalSoneId")).thenReturn(localSone.asOptional())
+       }
+
+       @Test
+       fun `request without parameters results in FCP exception`() {
+           requestWithoutAnyParameterResultsInFcpException()
+       }
+
+       @Test
+       fun `request with invalid post id results in FCP exception`() {
+               parameters += "Post" to "InvalidPostId"
+               expectedException.expect(FcpException::class.java)
+               command.execute(parameters)
+       }
+
+       @Test
+       fun `request with missing local sone results in FCP exception`() {
+           parameters += "Post" to "PostId"
+               expectedException.expect(FcpException::class.java)
+               command.execute(parameters)
+       }
+
+       @Test
+       fun `request with invalid sone results in FCP exception`() {
+               parameters += "Post" to "PostId"
+               parameters += "Sone" to "InvalidSoneId"
+               expectedException.expect(FcpException::class.java)
+               command.execute(parameters)
+       }
+
+       @Test
+       fun `request with valid remote sone results in FCP exception`() {
+               parameters += "Post" to "PostId"
+               parameters += "Sone" to "RemoteSoneId"
+               expectedException.expect(FcpException::class.java)
+               command.execute(parameters)
+       }
+
+       @Test
+       fun `request with valid parameters adds post to liked posts for sone`() {
+               whenever(core.getLikes(post)).thenReturn(setOf(mock<Sone>(), mock<Sone>(), mock<Sone>()))
+               parameters += "Post" to "PostId"
+               parameters += "Sone" to "LocalSoneId"
+               val replyParameters = command.execute(parameters).replyParameters
+               assertThat(replyParameters["Message"], equalTo("PostLiked"))
+               assertThat(replyParameters["LikeCount"], equalTo("3"))
+               verify(localSone).addLikedPostId("PostId")
+       }
+
+}