1 package net.pterodactylus.sone.web
3 import net.pterodactylus.sone.web.WebTestUtils.redirectsTo
4 import net.pterodactylus.util.web.Method.POST
5 import org.mockito.ArgumentMatchers.anyInt
6 import org.mockito.ArgumentMatchers.eq
7 import org.mockito.Mockito.`when`
9 import net.pterodactylus.sone.data.PostReply
11 import com.google.common.base.Optional
12 import net.pterodactylus.sone.data.Sone
13 import net.pterodactylus.sone.test.mock
14 import net.pterodactylus.sone.test.whenever
15 import net.pterodactylus.util.web.Method.GET
16 import org.hamcrest.MatcherAssert
17 import org.hamcrest.MatcherAssert.assertThat
18 import org.hamcrest.Matchers.equalTo
19 import org.junit.Before
21 import org.mockito.Mockito.never
22 import org.mockito.Mockito.verify
25 * Unit test for [DeleteReplyPage].
27 class DeleteReplyPageTest : WebPageTest() {
29 private val page = DeleteReplyPage(template, webInterface)
31 private val sone = mock<Sone>()
32 private val reply = mock<PostReply>()
36 whenever(sone.isLocal).thenReturn(true)
37 whenever(reply.sone).thenReturn(sone)
41 fun `get request sets reply ID and return page in template context`() {
43 addHttpRequestParameter("reply", "reply-id")
44 addHttpRequestParameter("returnPage", "return.html")
45 page.handleRequest(freenetRequest, templateContext)
46 assertThat(templateContext["reply"], equalTo<Any>("reply-id"))
47 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
51 fun `post request without any action sets reply ID and return page in template context`() {
53 addPostReply("reply-id", reply)
54 addHttpRequestParameter("reply", "reply-id")
55 addHttpRequestParameter("returnPage", "return.html")
56 page.handleRequest(freenetRequest, templateContext)
57 assertThat(templateContext["reply"], equalTo<Any>("reply-id"))
58 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
62 fun `trying to delete a reply with an invalid ID results in no permission page`() {
64 expectedException.expect(redirectsTo("noPermission.html"))
65 page.processTemplate(freenetRequest, templateContext)
69 fun `trying to delete a reply from a non-local sone results in no permission page`() {
71 addHttpRequestParameter("reply", "reply-id")
72 whenever(sone.isLocal).thenReturn(false)
73 addPostReply("reply-id", reply)
74 expectedException.expect(redirectsTo("noPermission.html"))
75 page.processTemplate(freenetRequest, templateContext)
79 fun `confirming deletion of reply deletes the reply and redirects to return page`() {
81 addPostReply("reply-id", reply)
82 addHttpRequestParameter("reply", "reply-id")
83 addHttpRequestParameter("returnPage", "return.html")
84 addHttpRequestParameter("confirmDelete", "true")
85 expectedException.expect(redirectsTo("return.html"))
87 page.processTemplate(freenetRequest, templateContext)
89 verify(core).deleteReply(reply)
94 fun `aborting deletion of reply redirects to return page`() {
96 addPostReply("reply-id", reply)
97 addHttpRequestParameter("reply", "reply-id")
98 addHttpRequestParameter("returnPage", "return.html")
99 addHttpRequestParameter("abortDelete", "true")
100 expectedException.expect(redirectsTo("return.html"))
102 page.processTemplate(freenetRequest, templateContext)
104 verify(core, never()).deleteReply(reply)