✨ Annotate KnownSonesPage with MenuName
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / DeleteReplyPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.data.PostReply
4 import net.pterodactylus.sone.data.Sone
5 import net.pterodactylus.sone.test.getInstance
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import net.pterodactylus.sone.web.baseInjector
9 import net.pterodactylus.util.web.Method.POST
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
12 import org.hamcrest.Matchers.notNullValue
13 import org.junit.Before
14 import org.junit.Test
15 import org.mockito.Mockito.never
16 import org.mockito.Mockito.verify
17
18 /**
19  * Unit test for [DeleteReplyPage].
20  */
21 class DeleteReplyPageTest: WebPageTest(::DeleteReplyPage) {
22
23         private val sone = mock<Sone>()
24         private val reply = mock<PostReply>()
25
26         @Before
27         fun setupReply() {
28                 whenever(sone.isLocal).thenReturn(true)
29                 whenever(reply.sone).thenReturn(sone)
30         }
31
32         @Test
33         fun `page returns correct path`() {
34             assertThat(page.path, equalTo("deleteReply.html"))
35         }
36
37         @Test
38         fun `page requires login`() {
39             assertThat(page.requiresLogin(), equalTo(true))
40         }
41
42         @Test
43         fun `get request sets reply ID and return page in template context`() {
44                 addHttpRequestParameter("reply", "reply-id")
45                 addHttpRequestParameter("returnPage", "return.html")
46                 page.processTemplate(freenetRequest, templateContext)
47                 assertThat(templateContext["reply"], equalTo<Any>("reply-id"))
48                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
49         }
50
51         @Test
52         fun `post request without any action sets reply ID and return page in template context`() {
53                 setMethod(POST)
54                 addPostReply("reply-id", reply)
55                 addHttpRequestPart("reply", "reply-id")
56                 addHttpRequestPart("returnPage", "return.html")
57                 page.processTemplate(freenetRequest, templateContext)
58                 assertThat(templateContext["reply"], equalTo<Any>("reply-id"))
59                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
60         }
61
62         @Test
63         fun `trying to delete a reply with an invalid ID results in no permission page`() {
64                 setMethod(POST)
65                 verifyRedirect("noPermission.html")
66         }
67
68         @Test
69         fun `trying to delete a reply from a non-local sone results in no permission page`() {
70                 setMethod(POST)
71                 addHttpRequestPart("reply", "reply-id")
72                 whenever(sone.isLocal).thenReturn(false)
73                 addPostReply("reply-id", reply)
74                 verifyRedirect("noPermission.html")
75         }
76
77         @Test
78         fun `confirming deletion of reply deletes the reply and redirects to return page`() {
79                 setMethod(POST)
80                 addPostReply("reply-id", reply)
81                 addHttpRequestPart("reply", "reply-id")
82                 addHttpRequestPart("returnPage", "return.html")
83                 addHttpRequestPart("confirmDelete", "true")
84                 verifyRedirect("return.html") {
85                         verify(core).deleteReply(reply)
86                 }
87         }
88
89         @Test
90         fun `aborting deletion of reply redirects to return page`() {
91                 setMethod(POST)
92                 addPostReply("reply-id", reply)
93                 addHttpRequestPart("reply", "reply-id")
94                 addHttpRequestPart("returnPage", "return.html")
95                 addHttpRequestPart("abortDelete", "true")
96                 verifyRedirect("return.html") {
97                         verify(core, never()).deleteReply(reply)
98                 }
99         }
100
101         @Test
102         fun `page can be created by dependency injection`() {
103                 assertThat(baseInjector.getInstance<DeleteReplyPage>(), notNullValue())
104         }
105
106 }