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