846600158377d5201946de666cd6cfe01b2484f8
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / DeletePostPageTest.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 [DeletePostPage].
15  */
16 class DeletePostPageTest: WebPageTest(::DeletePostPage) {
17
18         private val post = mock<Post>()
19         private val sone = mock<Sone>()
20
21         @Before
22         fun setupPost() {
23                 whenever(post.sone).thenReturn(sone)
24                 whenever(sone.isLocal).thenReturn(true)
25         }
26
27         @Test
28         fun `page returns correct path`() {
29             assertThat(page.path, equalTo("deletePost.html"))
30         }
31
32         @Test
33         fun `page requires login`() {
34             assertThat(page.requiresLogin(), equalTo(true))
35         }
36
37         @Test
38         fun `get request with invalid post redirects to no permission page`() {
39                 verifyRedirect("noPermission.html")
40         }
41
42         @Test
43         fun `get request with valid post sets post and return page in template context`() {
44                 addPost("post-id", post)
45                 addHttpRequestParameter("post", "post-id")
46                 addHttpRequestParameter("returnPage", "return.html")
47                 page.processTemplate(freenetRequest, templateContext)
48                 assertThat(templateContext["post"], equalTo<Any>(post))
49                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
50         }
51
52         @Test
53         fun `post request with invalid post redirects to no permission page`() {
54                 setMethod(POST)
55                 verifyRedirect("noPermission.html")
56         }
57
58         @Test
59         fun `post request with post from non-local sone redirects to no permission page`() {
60                 setMethod(POST)
61                 whenever(sone.isLocal).thenReturn(false)
62                 addPost("post-id", post)
63                 addHttpRequestPart("post", "post-id")
64                 addHttpRequestPart("returnPage", "return.html")
65                 verifyRedirect("noPermission.html")
66         }
67
68         @Test
69         fun `post request with confirmation deletes post and redirects to return page`() {
70                 setMethod(POST)
71                 addPost("post-id", post)
72                 addHttpRequestPart("post", "post-id")
73                 addHttpRequestPart("returnPage", "return.html")
74                 addHttpRequestPart("confirmDelete", "true")
75                 verifyRedirect("return.html") {
76                         verify(core).deletePost(post)
77                 }
78         }
79
80         @Test
81         fun `post request with abort delete does not delete post and redirects to return page`() {
82                 setMethod(POST)
83                 addPost("post-id", post)
84                 addHttpRequestPart("post", "post-id")
85                 addHttpRequestPart("returnPage", "return.html")
86                 addHttpRequestPart("abortDelete", "true")
87                 verifyRedirect("return.html") {
88                         verify(core, never()).deletePost(post)
89                 }
90         }
91
92         @Test
93         fun `post request without delete or abort sets post in template context`() {
94                 setMethod(POST)
95                 addPost("post-id", post)
96                 addHttpRequestPart("post", "post-id")
97                 addHttpRequestPart("returnPage", "return.html")
98                 page.processTemplate(freenetRequest, templateContext)
99                 assertThat(templateContext["post"], equalTo<Any>(post))
100                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
101         }
102
103         @Test
104         fun `page can be created by dependency injection`() {
105             assertThat(baseInjector.getInstance<DeletePostPage>(), notNullValue())
106         }
107
108         @Test
109         fun `page is annotated with correct template path`() {
110             assertThat(page.templatePath, equalTo("/templates/deletePost.html"))
111         }
112
113 }