dccce87065e7b0861006988629fdd4eb1594127d
[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.getInstance
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.utils.asOptional
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.Test
14 import org.mockito.Mockito.verify
15
16 /**
17  * Unit test for [CreatePostPage].
18  */
19 class CreatePostPageTest: WebPageTest(::CreatePostPage) {
20
21         @Test
22         fun `page returns correct path`() {
23                 assertThat(page.path, equalTo("createPost.html"))
24         }
25
26         @Test
27         fun `page requires login`() {
28                 assertThat(page.requiresLogin(), equalTo(true))
29         }
30
31         @Test
32         fun `return page is set in template context`() {
33                 addHttpRequestPart("returnPage", "return.html")
34                 page.processTemplate(freenetRequest, templateContext)
35                 assertThat(templateContext["returnPage"], equalTo<Any>("return.html"))
36         }
37
38         @Test
39         fun `post is created correctly`() {
40                 setMethod(POST)
41                 addHttpRequestPart("returnPage", "return.html")
42                 addHttpRequestPart("text", "post text")
43                 verifyRedirect("return.html") {
44                         verify(core).createPost(currentSone, absent(), "post text")
45                 }
46         }
47
48         @Test
49         fun `creating an empty post is denied`() {
50                 setMethod(POST)
51                 addHttpRequestPart("returnPage", "return.html")
52                 addHttpRequestPart("text", "  ")
53                 page.processTemplate(freenetRequest, templateContext)
54                 assertThat(templateContext["errorTextEmpty"], equalTo<Any>(true))
55         }
56
57         @Test
58         fun `a sender can be selected`() {
59                 setMethod(POST)
60                 addHttpRequestPart("returnPage", "return.html")
61                 addHttpRequestPart("text", "post text")
62                 addHttpRequestPart("sender", "sender-id")
63                 val sender = mock<Sone>()
64                 addLocalSone("sender-id", sender)
65                 verifyRedirect("return.html") {
66                         verify(core).createPost(sender, absent(), "post text")
67                 }
68         }
69
70         @Test
71         fun `a recipient can be selected`() {
72                 setMethod(POST)
73                 addHttpRequestPart("returnPage", "return.html")
74                 addHttpRequestPart("text", "post text")
75                 addHttpRequestPart("recipient", "recipient-id")
76                 val recipient = mock<Sone>()
77                 addSone("recipient-id", recipient)
78                 verifyRedirect("return.html") {
79                         verify(core).createPost(currentSone, recipient.asOptional(), "post text")
80                 }
81         }
82
83         @Test
84         fun `text is filtered correctly`() {
85                 setMethod(POST)
86                 addHttpRequestPart("returnPage", "return.html")
87                 addHttpRequestPart("text", "post http://localhost:12345/KSK@foo text")
88                 addHttpRequestHeader("Host", "localhost:12345")
89                 verifyRedirect("return.html") {
90                         verify(core).createPost(currentSone, absent(), "post KSK@foo text")
91                 }
92         }
93
94         @Test
95         fun `page can be created by dependency injection`() {
96             assertThat(baseInjector.getInstance<CreatePostPage>(), notNullValue())
97         }
98
99 }