383e38c6e6763093d79a601d155750a624075f1c
[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.Post
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.util.web.Method.POST
8 import org.hamcrest.MatcherAssert.assertThat
9 import org.hamcrest.Matchers.equalTo
10 import org.junit.Before
11 import org.junit.Test
12 import org.mockito.Mockito.never
13 import org.mockito.Mockito.verify
14
15 /**
16  * Unit test for [DeletePostPage].
17  */
18 class DeletePostPageTest: WebPageTest2(::DeletePostPage) {
19
20         private val post = mock<Post>()
21         private val sone = mock<Sone>()
22
23         @Before
24         fun setupPost() {
25                 whenever(post.sone).thenReturn(sone)
26                 whenever(sone.isLocal).thenReturn(true)
27         }
28
29         @Test
30         fun `page returns correct path`() {
31             assertThat(page.path, equalTo("deletePost.html"))
32         }
33
34         @Test
35         fun `page requires login`() {
36             assertThat(page.requiresLogin(), equalTo(true))
37         }
38
39         @Test
40         fun `get request with invalid post redirects to no permission page`() {
41                 verifyRedirect("noPermission.html")
42         }
43
44         @Test
45         fun `get request with valid post sets post and return page in template context`() {
46                 addPost("post-id", post)
47                 addHttpRequestParameter("post", "post-id")
48                 addHttpRequestParameter("returnPage", "return.html")
49                 page.processTemplate(freenetRequest, templateContext)
50                 assertThat(templateContext["post"], equalTo<Any>(post))
51                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
52         }
53
54         @Test
55         fun `post request with invalid post redirects to no permission page`() {
56                 setMethod(POST)
57                 verifyRedirect("noPermission.html")
58         }
59
60         @Test
61         fun `post request with post from non-local sone redirects to no permission page`() {
62                 setMethod(POST)
63                 whenever(sone.isLocal).thenReturn(false)
64                 addPost("post-id", post)
65                 addHttpRequestPart("post", "post-id")
66                 addHttpRequestPart("returnPage", "return.html")
67                 verifyRedirect("noPermission.html")
68         }
69
70         @Test
71         fun `post request with confirmation deletes post and redirects to return page`() {
72                 setMethod(POST)
73                 addPost("post-id", post)
74                 addHttpRequestPart("post", "post-id")
75                 addHttpRequestPart("returnPage", "return.html")
76                 addHttpRequestPart("confirmDelete", "true")
77                 verifyRedirect("return.html") {
78                         verify(core).deletePost(post)
79                 }
80         }
81
82         @Test
83         fun `post request with abort delete does not delete post and redirects to return page`() {
84                 setMethod(POST)
85                 addPost("post-id", post)
86                 addHttpRequestPart("post", "post-id")
87                 addHttpRequestPart("returnPage", "return.html")
88                 addHttpRequestPart("abortDelete", "true")
89                 verifyRedirect("return.html") {
90                         verify(core, never()).deletePost(post)
91                 }
92         }
93
94         @Test
95         fun `post request without delete or abort sets post in template context`() {
96                 setMethod(POST)
97                 addPost("post-id", post)
98                 addHttpRequestPart("post", "post-id")
99                 addHttpRequestPart("returnPage", "return.html")
100                 page.processTemplate(freenetRequest, templateContext)
101                 assertThat(templateContext["post"], equalTo<Any>(post))
102                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
103         }
104
105 }