1 package net.pterodactylus.sone.web.pages
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
14 import org.mockito.Mockito.verify
17 * Unit test for [CreatePostPage].
19 class CreatePostPageTest: WebPageTest(::CreatePostPage) {
22 fun `page returns correct path`() {
23 assertThat(page.path, equalTo("createPost.html"))
27 fun `page requires login`() {
28 assertThat(page.requiresLogin(), equalTo(true))
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"))
39 fun `post is created correctly`() {
41 addHttpRequestPart("returnPage", "return.html")
42 addHttpRequestPart("text", "post text")
43 verifyRedirect("return.html") {
44 verify(core).createPost(currentSone, absent(), "post text")
49 fun `creating an empty post is denied`() {
51 addHttpRequestPart("returnPage", "return.html")
52 addHttpRequestPart("text", " ")
53 page.processTemplate(freenetRequest, templateContext)
54 assertThat(templateContext["errorTextEmpty"], equalTo<Any>(true))
58 fun `a sender can be selected`() {
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")
71 fun `a recipient can be selected`() {
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")
84 fun `text is filtered correctly`() {
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")
95 fun `page can be created by dependency injection`() {
96 assertThat(baseInjector.getInstance<CreatePostPage>(), notNullValue())