Move web pages to their own package
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / CreatePostPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import com.google.common.base.Optional.absent
4 import net.pterodactylus.sone.data.Sone
5 import net.pterodactylus.sone.test.asOptional
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.web.pages.WebPageTest
8 import net.pterodactylus.sone.web.pages.CreatePostPage
9 import net.pterodactylus.util.web.Method.POST
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
12 import org.junit.Test
13 import org.mockito.Mockito.verify
14
15 /**
16  * Unit test for [CreatePostPage].
17  */
18 class CreatePostPageTest: WebPageTest() {
19
20         private val page = CreatePostPage(template, webInterface)
21
22         override fun getPage() = page
23
24         @Test
25         fun `page returns correct path`() {
26                 assertThat(page.path, equalTo("createPost.html"))
27         }
28
29         @Test
30         fun `page requires login`() {
31                 assertThat(page.requiresLogin(), equalTo(true))
32         }
33
34         @Test
35         fun `return page is set in template context`() {
36                 addHttpRequestParameter("returnPage", "return.html")
37                 page.processTemplate(freenetRequest, templateContext)
38                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
39         }
40
41         @Test
42         fun `post is created correctly`() {
43                 request("", POST)
44                 addHttpRequestParameter("returnPage", "return.html")
45                 addHttpRequestParameter("text", "post text")
46                 verifyRedirect("return.html") {
47                         verify(core).createPost(currentSone, absent(), "post text")
48                 }
49         }
50
51         @Test
52         fun `creating an empty post is denied`() {
53                 request("", POST)
54                 addHttpRequestParameter("returnPage", "return.html")
55                 addHttpRequestParameter("text", "  ")
56                 page.processTemplate(freenetRequest, templateContext)
57                 assertThat(templateContext["errorTextEmpty"], equalTo<Any>(true))
58         }
59
60         @Test
61         fun `a sender can be selected`() {
62                 request("", POST)
63                 addHttpRequestParameter("returnPage", "return.html")
64                 addHttpRequestParameter("text", "post text")
65                 addHttpRequestParameter("sender", "sender-id")
66                 val sender = mock<Sone>()
67                 addLocalSone("sender-id", sender)
68                 verifyRedirect("return.html") {
69                         verify(core).createPost(sender, absent(), "post text")
70                 }
71         }
72
73         @Test
74         fun `a recipient can be selected`() {
75                 request("", POST)
76                 addHttpRequestParameter("returnPage", "return.html")
77                 addHttpRequestParameter("text", "post text")
78                 addHttpRequestParameter("recipient", "recipient-id")
79                 val recipient = mock<Sone>()
80                 addSone("recipient-id", recipient)
81                 verifyRedirect("return.html") {
82                         verify(core).createPost(currentSone, recipient.asOptional(), "post text")
83                 }
84         }
85
86         @Test
87         fun `text is filtered correctly`() {
88                 request("", POST)
89                 addHttpRequestParameter("returnPage", "return.html")
90                 addHttpRequestParameter("text", "post http://localhost:12345/KSK@foo text")
91                 addHttpRequestHeader("Host", "localhost:12345")
92                 verifyRedirect("return.html") {
93                         verify(core).createPost(currentSone, absent(), "post KSK@foo text")
94                 }
95         }
96
97 }