1 package net.pterodactylus.sone.web.pages
3 import net.pterodactylus.sone.data.PostReply
4 import net.pterodactylus.sone.data.Sone
5 import net.pterodactylus.sone.test.mock
6 import net.pterodactylus.sone.test.whenever
7 import net.pterodactylus.sone.web.pages.WebPageTest
8 import net.pterodactylus.sone.web.pages.DeleteReplyPage
9 import net.pterodactylus.util.web.Method.GET
10 import net.pterodactylus.util.web.Method.POST
11 import org.hamcrest.MatcherAssert.assertThat
12 import org.hamcrest.Matchers.equalTo
13 import org.junit.Before
15 import org.mockito.Mockito.never
16 import org.mockito.Mockito.verify
19 * Unit test for [DeleteReplyPage].
21 class DeleteReplyPageTest : WebPageTest() {
23 private val page = DeleteReplyPage(template, webInterface)
25 private val sone = mock<Sone>()
26 private val reply = mock<PostReply>()
28 override fun getPage() = page
32 whenever(sone.isLocal).thenReturn(true)
33 whenever(reply.sone).thenReturn(sone)
37 fun `page returns correct path`() {
38 assertThat(page.path, equalTo("deleteReply.html"))
42 fun `page requires login`() {
43 assertThat(page.requiresLogin(), equalTo(true))
47 fun `get request sets reply ID and return page in template context`() {
49 addHttpRequestParameter("reply", "reply-id")
50 addHttpRequestParameter("returnPage", "return.html")
51 page.processTemplate(freenetRequest, templateContext)
52 assertThat(templateContext["reply"], equalTo<Any>("reply-id"))
53 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
57 fun `post request without any action sets reply ID and return page in template context`() {
59 addPostReply("reply-id", reply)
60 addHttpRequestParameter("reply", "reply-id")
61 addHttpRequestParameter("returnPage", "return.html")
62 page.processTemplate(freenetRequest, templateContext)
63 assertThat(templateContext["reply"], equalTo<Any>("reply-id"))
64 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
68 fun `trying to delete a reply with an invalid ID results in no permission page`() {
70 verifyRedirect("noPermission.html")
74 fun `trying to delete a reply from a non-local sone results in no permission page`() {
76 addHttpRequestParameter("reply", "reply-id")
77 whenever(sone.isLocal).thenReturn(false)
78 addPostReply("reply-id", reply)
79 verifyRedirect("noPermission.html")
83 fun `confirming deletion of reply deletes the reply and redirects to return page`() {
85 addPostReply("reply-id", reply)
86 addHttpRequestParameter("reply", "reply-id")
87 addHttpRequestParameter("returnPage", "return.html")
88 addHttpRequestParameter("confirmDelete", "true")
89 verifyRedirect("return.html") {
90 verify(core).deleteReply(reply)
95 fun `aborting deletion of reply redirects to return page`() {
97 addPostReply("reply-id", reply)
98 addHttpRequestParameter("reply", "reply-id")
99 addHttpRequestParameter("returnPage", "return.html")
100 addHttpRequestParameter("abortDelete", "true")
101 verifyRedirect("return.html") {
102 verify(core, never()).deleteReply(reply)