1 package net.pterodactylus.sone.web.pages
3 import net.pterodactylus.sone.data.Post
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
15 import org.mockito.Mockito.never
16 import org.mockito.Mockito.verify
19 * Unit test for [DeletePostPage].
21 class DeletePostPageTest: WebPageTest(::DeletePostPage) {
23 private val post = mock<Post>()
24 private val sone = mock<Sone>()
28 whenever(post.sone).thenReturn(sone)
29 whenever(sone.isLocal).thenReturn(true)
33 fun `page returns correct path`() {
34 assertThat(page.path, equalTo("deletePost.html"))
38 fun `page requires login`() {
39 assertThat(page.requiresLogin(), equalTo(true))
43 fun `get request with invalid post redirects to no permission page`() {
44 verifyRedirect("noPermission.html")
48 fun `get request with valid post sets post and return page in template context`() {
49 addPost("post-id", post)
50 addHttpRequestParameter("post", "post-id")
51 addHttpRequestParameter("returnPage", "return.html")
52 page.processTemplate(freenetRequest, templateContext)
53 assertThat(templateContext["post"], equalTo<Any>(post))
54 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
58 fun `post request with invalid post redirects to no permission page`() {
60 verifyRedirect("noPermission.html")
64 fun `post request with post from non-local sone redirects to no permission page`() {
66 whenever(sone.isLocal).thenReturn(false)
67 addPost("post-id", post)
68 addHttpRequestPart("post", "post-id")
69 addHttpRequestPart("returnPage", "return.html")
70 verifyRedirect("noPermission.html")
74 fun `post request with confirmation deletes post and redirects to return page`() {
76 addPost("post-id", post)
77 addHttpRequestPart("post", "post-id")
78 addHttpRequestPart("returnPage", "return.html")
79 addHttpRequestPart("confirmDelete", "true")
80 verifyRedirect("return.html") {
81 verify(core).deletePost(post)
86 fun `post request with abort delete does not delete post and redirects to return page`() {
88 addPost("post-id", post)
89 addHttpRequestPart("post", "post-id")
90 addHttpRequestPart("returnPage", "return.html")
91 addHttpRequestPart("abortDelete", "true")
92 verifyRedirect("return.html") {
93 verify(core, never()).deletePost(post)
98 fun `post request without delete or abort sets post in template context`() {
100 addPost("post-id", post)
101 addHttpRequestPart("post", "post-id")
102 addHttpRequestPart("returnPage", "return.html")
103 page.processTemplate(freenetRequest, templateContext)
104 assertThat(templateContext["post"], equalTo<Any>(post))
105 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
109 fun `page can be created by dependency injection`() {
110 assertThat(baseInjector.getInstance<DeletePostPage>(), notNullValue())