1 package net.pterodactylus.sone.web.pages
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.*
11 import org.mockito.Mockito.*
14 * Unit test for [DeletePostPage].
16 class DeletePostPageTest : WebPageTest(::DeletePostPage) {
18 private val post = mock<Post>()
19 private val sone = mock<Sone>()
23 whenever(post.sone).thenReturn(sone)
24 whenever(sone.isLocal).thenReturn(true)
28 fun `page returns correct path`() {
29 assertThat(page.path, equalTo("deletePost.html"))
33 fun `page requires login`() {
34 assertThat(page.requiresLogin(), equalTo(true))
38 fun `get request with invalid post redirects to no permission page`() {
39 verifyRedirect("noPermission.html")
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"))
53 fun `post request with invalid post redirects to no permission page`() {
55 verifyRedirect("noPermission.html")
59 fun `post request with post from non-local sone redirects to no permission page`() {
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")
69 fun `post request with confirmation deletes post and redirects to return page`() {
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)
81 fun `post request with abort delete does not delete post and redirects to return page`() {
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)
93 fun `post request without delete or abort sets post in template context`() {
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"))
104 fun `page can be created by dependency injection`() {
105 assertThat(baseInjector.getInstance<DeletePostPage>(), notNullValue())
109 fun `page is annotated with correct template path`() {
110 assertThat(page.templatePath, equalTo("/templates/deletePost.html"))