Convert and complete unit test and fix bug in page
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / DeleteReplyPageTest.kt
1 package net.pterodactylus.sone.web
2
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`
8
9 import net.pterodactylus.sone.data.PostReply
10
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
20 import org.junit.Test
21 import org.mockito.Mockito.never
22 import org.mockito.Mockito.verify
23
24 /**
25  * Unit test for [DeleteReplyPage].
26  */
27 class DeleteReplyPageTest : WebPageTest() {
28
29         private val page = DeleteReplyPage(template, webInterface)
30
31         private val sone = mock<Sone>()
32         private val reply = mock<PostReply>()
33
34         @Before
35         fun setupReply() {
36                 whenever(sone.isLocal).thenReturn(true)
37                 whenever(reply.sone).thenReturn(sone)
38         }
39         
40         @Test
41         fun `get request sets reply ID and return page in template context`() {
42             request("", GET)
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"))
48         }
49
50         @Test
51         fun `post request without any action sets reply ID and return page in template context`() {
52             request("", POST)
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"))
59         }
60
61         @Test
62         fun `trying to delete a reply with an invalid ID results in no permission page`() {
63                 request("", POST)
64                 expectedException.expect(redirectsTo("noPermission.html"))
65                 page.processTemplate(freenetRequest, templateContext)
66         }
67
68         @Test
69         fun `trying to delete a reply from a non-local sone results in no permission page`() {
70             request("", POST)
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)
76         }
77
78         @Test
79         fun `confirming deletion of reply deletes the reply and redirects to return page`() {
80             request("", POST)
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"))
86                 try {
87                         page.processTemplate(freenetRequest, templateContext)
88                 } finally {
89                         verify(core).deleteReply(reply)
90                 }
91         }
92         
93         @Test
94         fun `aborting deletion of reply redirects to return page`() {
95             request("", POST)
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"))
101                 try {
102                         page.processTemplate(freenetRequest, templateContext)
103                 } finally {
104                         verify(core, never()).deleteReply(reply)
105                 }
106         }
107
108 }