Add test for create post ajax page
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / CreatePostAjaxPageTest.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import com.google.common.base.Optional
4 import net.pterodactylus.sone.data.Post
5 import net.pterodactylus.sone.data.Sone
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import net.pterodactylus.sone.utils.asOptional
9 import org.hamcrest.MatcherAssert.assertThat
10 import org.hamcrest.Matchers.equalTo
11 import org.hamcrest.Matchers.nullValue
12 import org.junit.Test
13
14 /**
15  * Unit test for [CreatePostAjaxPage].
16  */
17 class CreatePostAjaxPageTest : JsonPageTest(::CreatePostAjaxPage) {
18
19         @Test
20         fun `page returns correct path`() {
21                 assertThat(page.path, equalTo("createPost.ajax"))
22         }
23
24         @Test
25         fun `page needs form password`() {
26                 assertThat(page.needsFormPassword(), equalTo(true))
27         }
28
29         @Test
30         fun `page requires login`() {
31                 assertThat(page.requiresLogin(), equalTo(true))
32         }
33
34         @Test
35         fun `page requires a current sone`() {
36                 unsetCurrentSone()
37                 assertThat(json.isSuccess, equalTo(false))
38                 assertThat(json.error, equalTo("auth-required"))
39         }
40
41         @Test
42         fun `missing text parameter returns error`() {
43                 assertThat(json.isSuccess, equalTo(false))
44                 assertThat(json.error, equalTo("text-required"))
45         }
46
47         @Test
48         fun `empty text returns error`() {
49                 addRequestParameter("text", "")
50                 assertThat(json.isSuccess, equalTo(false))
51                 assertThat(json.error, equalTo("text-required"))
52         }
53
54         @Test
55         fun `whitespace-only text returns error`() {
56                 addRequestParameter("text", "  ")
57                 assertThat(json.isSuccess, equalTo(false))
58                 assertThat(json.error, equalTo("text-required"))
59         }
60
61         @Test
62         fun `request with valid data creates post`() {
63                 addRequestParameter("text", "test")
64                 val post = createPost()
65                 whenever(core.createPost(currentSone, Optional.absent(), "test")).thenReturn(post)
66                 assertThat(json.isSuccess, equalTo(true))
67                 assertThat(json["postId"].asText(), equalTo("id"))
68                 assertThat(json["sone"].asText(), equalTo(currentSone.id))
69                 assertThat(json["recipient"], nullValue())
70         }
71
72         @Test
73         fun `request with invalid recipient creates post without recipient`() {
74                 addRequestParameter("text", "test")
75                 addRequestParameter("recipient", "invalid")
76                 val post = createPost()
77                 whenever(core.createPost(currentSone, Optional.absent(), "test")).thenReturn(post)
78                 assertThat(json.isSuccess, equalTo(true))
79                 assertThat(json["postId"].asText(), equalTo("id"))
80                 assertThat(json["sone"].asText(), equalTo(currentSone.id))
81                 assertThat(json["recipient"], nullValue())
82         }
83
84         @Test
85         fun `request with valid data and recipient creates correct post`() {
86                 addRequestParameter("text", "test")
87                 addRequestParameter("recipient", "valid")
88                 val recipient = mock<Sone>().apply { whenever(id).thenReturn("valid") }
89                 addSone(recipient)
90                 val post = createPost("valid")
91                 whenever(core.createPost(currentSone, Optional.of(recipient), "test")).thenReturn(post)
92                 assertThat(json.isSuccess, equalTo(true))
93                 assertThat(json["postId"].asText(), equalTo("id"))
94                 assertThat(json["sone"].asText(), equalTo(currentSone.id))
95                 assertThat(json["recipient"].asText(), equalTo("valid"))
96         }
97
98         @Test
99         fun `text is filtered correctly`() {
100                 addRequestParameter("text", "Link http://freenet.test:8888/KSK@foo is filtered")
101                 addRequestHeader("Host", "freenet.test:8888")
102                 val post = createPost()
103                 whenever(core.createPost(currentSone, Optional.absent(), "Link KSK@foo is filtered")).thenReturn(post)
104                 assertThat(json.isSuccess, equalTo(true))
105                 assertThat(json["postId"].asText(), equalTo("id"))
106                 assertThat(json["sone"].asText(), equalTo(currentSone.id))
107                 assertThat(json["recipient"], nullValue())
108         }
109
110         private fun createPost(recipientId: String? = null) =
111                         mock<Post>().apply {
112                                 whenever(id).thenReturn("id")
113                                 whenever(sone).thenReturn(currentSone)
114                                 whenever(this.recipientId).thenReturn(recipientId.asOptional())
115                         }
116
117 }