Replace AbstractSoneCommand with Kotlin version
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / fcp / GetPostCommandTest.kt
index dff812b..f8113af 100644 (file)
@@ -2,12 +2,10 @@ package net.pterodactylus.sone.fcp
 
 import freenet.support.SimpleFieldSet
 import net.pterodactylus.sone.core.Core
-import net.pterodactylus.sone.data.Post
-import net.pterodactylus.sone.data.PostReply
 import net.pterodactylus.sone.data.Sone
-import net.pterodactylus.sone.test.asOptional
 import net.pterodactylus.sone.test.mock
 import net.pterodactylus.sone.test.whenever
+import net.pterodactylus.sone.utils.asOptional
 import org.hamcrest.MatcherAssert.assertThat
 import org.hamcrest.Matchers.containsInAnyOrder
 import org.hamcrest.Matchers.equalTo
@@ -23,26 +21,25 @@ class GetPostCommandTest : SoneCommandTest() {
        private val sone = mock<Sone>().apply {
                whenever(id).thenReturn("SoneId")
        }
-       private val post = createPost()
+       private val post = createPost("ValidPostId", sone, null, 1000, "Post Text\r\nSecond \\Line")
+       private val sone1 = mock<Sone>().apply { whenever(id).thenReturn("Sone1") }
+       private val sone2 = mock<Sone>().apply { whenever(id).thenReturn("Sone2") }
+       private val postReply1 = createReply("ReplyId1", sone1, post, 1000, "Reply 1")
+       private val postReply2 = createReply("ReplyId2", sone2, post, 2000, "Reply 2")
 
        override fun createCommand(core: Core) = GetPostCommand(core)
 
        @Before
        fun setupPostWithLikesAndReplies() {
-               whenever(core.getPost("ValidPostId")).thenReturn(post.asOptional())
-               val sone1 = mock<Sone>().apply { whenever(id).thenReturn("Sone1") }
-               val sone2 = mock<Sone>().apply { whenever(id).thenReturn("Sone2") }
+               whenever(core.getPost("ValidPostId")).thenReturn(post)
                whenever(core.getLikes(post)).thenReturn(setOf(sone1, sone2))
-               val replies = listOf(
-                               createPostReply("ReplyId1", sone1, 1000, "Reply 1"),
-                               createPostReply("ReplyId2", sone2, 2000, "Reply 2")
-               )
+               val replies = listOf(postReply1, postReply2)
                whenever(core.getReplies("ValidPostId")).thenReturn(replies)
        }
 
        @Test
        fun `command does not require write access`() {
-               assertThat(command.requiresWriteAccess(), equalTo(false))
+               assertThat(command.requiresWriteAccess, equalTo(false))
        }
 
        @Test
@@ -52,50 +49,26 @@ class GetPostCommandTest : SoneCommandTest() {
 
        @Test
        fun `request with invalid post parameter results in fcp exception`() {
-               parameters.putSingle("Post", "InvalidPostId")
+               parameters += "Post" to "InvalidPostId"
                executeCommandAndExpectFcpException()
        }
 
-       private fun createPostReply(id: String, sone: Sone, time: Long, text: String) = mock<PostReply>().apply {
-               whenever(this.id).thenReturn(id)
-               whenever(this.sone).thenReturn(sone)
-               whenever(this.time).thenReturn(time)
-               whenever(this.text).thenReturn(text)
-       }
-
-       private fun createPost() = mock<Post>().apply {
-               whenever(id).thenReturn("ValidPostId")
-               whenever(this.sone).thenReturn(this@GetPostCommandTest.sone)
-               whenever(recipientId).thenReturn(null.asOptional())
-               whenever(time).thenReturn(1000)
-               whenever(text).thenReturn("Post Text\r\nSecond \\Line")
-       }
-
        private fun verifyPostWithLikes(replyParameters: SimpleFieldSet) {
                assertThat(replyParameters["Message"], equalTo("Post"))
-               assertThat(replyParameters["Post.ID"], equalTo("ValidPostId"))
-               assertThat(replyParameters["Post.Sone"], equalTo("SoneId"))
-               assertThat(replyParameters["Post.Time"], equalTo("1000"))
-               assertThat(replyParameters["Post.Text"], equalTo("Post Text\\r\\nSecond \\\\Line"))
+               assertThat(replyParameters.parsePost("Post."), matchesPost(post))
                assertThat(replyParameters["Post.Likes.Count"], equalTo("2"))
                assertThat((0..1).map { replyParameters["Post.Likes.$it.ID"] }, containsInAnyOrder("Sone1", "Sone2"))
        }
 
        private fun verifyReplies(replyParameters: SimpleFieldSet) {
                assertThat(replyParameters["Post.Replies.Count"], equalTo("2"))
-               assertThat(replyParameters["Post.Replies.0.ID"], equalTo("ReplyId1"))
-               assertThat(replyParameters["Post.Replies.0.Sone"], equalTo("Sone1"))
-               assertThat(replyParameters["Post.Replies.0.Time"], equalTo("1000"))
-               assertThat(replyParameters["Post.Replies.0.Text"], equalTo("Reply 1"))
-               assertThat(replyParameters["Post.Replies.1.ID"], equalTo("ReplyId2"))
-               assertThat(replyParameters["Post.Replies.1.Sone"], equalTo("Sone2"))
-               assertThat(replyParameters["Post.Replies.1.Time"], equalTo("2000"))
-               assertThat(replyParameters["Post.Replies.1.Text"], equalTo("Reply 2"))
+               assertThat(replyParameters.parsePost("Post.Replies.0."), matchesReply(postReply1))
+               assertThat(replyParameters.parsePost("Post.Replies.1."), matchesReply(postReply2))
        }
 
        @Test
        fun `request with valid post parameter returns post response`() {
-               parameters.putSingle("Post", "ValidPostId")
+               parameters += "Post" to "ValidPostId"
                val replyParameters = command.execute(parameters).replyParameters
                verifyPostWithLikes(replyParameters)
                assertThat(replyParameters["Post.Recipient"], nullValue())
@@ -104,8 +77,8 @@ class GetPostCommandTest : SoneCommandTest() {
 
        @Test
        fun `request with valid post parameter without replies returns post response without replies`() {
-               parameters.putSingle("Post", "ValidPostId")
-               parameters.putSingle("IncludeReplies", "false")
+               parameters += "Post" to "ValidPostId"
+               parameters += "IncludeReplies" to "false"
                val replyParameters = command.execute(parameters).replyParameters
                verifyPostWithLikes(replyParameters)
                assertThat(replyParameters["Post.Recipient"], nullValue())
@@ -114,7 +87,7 @@ class GetPostCommandTest : SoneCommandTest() {
 
        @Test
        fun `request with valid post parameter returns post response with recipient`() {
-               parameters.putSingle("Post", "ValidPostId")
+               parameters += "Post" to "ValidPostId"
                whenever(post.recipientId).thenReturn("Sone2".asOptional())
                val replyParameters = command.execute(parameters).replyParameters
                verifyPostWithLikes(replyParameters)
@@ -124,8 +97,8 @@ class GetPostCommandTest : SoneCommandTest() {
 
        @Test
        fun `request with valid post parameter without replies returns post response without replies but with recipient`() {
-               parameters.putSingle("Post", "ValidPostId")
-               parameters.putSingle("IncludeReplies", "false")
+               parameters += "Post" to "ValidPostId"
+               parameters += "IncludeReplies" to "false"
                whenever(post.recipientId).thenReturn("Sone2".asOptional())
                val replyParameters = command.execute(parameters).replyParameters
                verifyPostWithLikes(replyParameters)